【问题标题】:Interfaces in C++: why do I need an interface class + another parent class?C++ 中的接口:为什么我需要一个接口类 + 另一个父类?
【发布时间】:2013-03-28 08:03:19
【问题描述】:

This question 很好地解释了如何在 C++ 中创建接口。代码如下:

class IDemo
{
    public:
        virtual ~IDemo() {}
        virtual void OverrideMe() = 0;
};

class Parent
{
    public:
        virtual ~Parent();
};

class Child : public Parent, public IDemo
{
    public:
        virtual void OverrideMe()
        {
            //do stuff
        }
};

但有一点我不清楚:我需要 Parent 类来做什么?

【问题讨论】:

  • 虽然我自己不确定,但我想它只是为了说明在这种情况下的多重继承的概念。基本上,它展示了如何将多个“接口”(或父类)放在一个类中。

标签: c++ interface


【解决方案1】:

您不需要继承接口以外的任何东西来使用接口,但是您可以这样做,并且该答案向您展示了如何使用。关键是您不需要只从一个或多个接口继承,您还可以添加类作为类的基础 - 几乎允许类和接口的任何组合。

【讨论】:

    【解决方案2】:

    实际上,我不知道为什么。您还可以执行以下操作:

    class IDemo
    {
    public:
        virtual ~IDemo() {}
        virtual void OverrideMe() = 0;
    };
    
    class Child : public IDemo
    {
    public:
        virtual void OverrideMe()
        {
            //do stuff
        }
    
        ~Child()
        {
        }            
    };
    

    一切都只取决于您的程序架构以及 ParentChild 的实际情况。看一下 C# 示例 - IDisposable 是一个接口,它允许处理由实现它的类使用的资源。要求基类是没有意义的——它甚至会使 IDisposable 更难使用,因为也许我不想要基类功能(尽管事实上,每个 .NET 类都派生自 Object,但仅此而已另一个故事)。

    如果您提供有关实际程序架构的更多信息,我们或许可以判断是否需要基类。

    还有一点值得指出。请记住,在 C++ 中,IDemo 实际上是一个类,仅从您的角度来看它是一个接口。所以在我的例子中,Child 实际上一个基类。

    【讨论】:

    • 感谢您的回答。我只对如何做到这一点感兴趣,实际上并没有我在 atm 使用它的上下文。
    猜你喜欢
    • 1970-01-01
    • 2014-09-16
    • 2011-04-24
    • 2021-11-02
    • 1970-01-01
    • 2020-01-23
    • 2011-11-10
    • 1970-01-01
    • 2015-03-10
    相关资源
    最近更新 更多