C:派生基类实现单一接口?

在C中,是否可以有一个base +派生类实现单个接口?

例如:

class Interface
{
    public:
        virtual void BaseFunction() = 0;
        virtual void DerivedFunction() = 0;
};

class Base
{
    public:
        virtual void BaseFunction(){}
};

class Derived : public Base, public Interface
{
    public: 
        void DerivedFunction(){}
};

void main()
{
    Derived derived;
}

由于派生不能被实例化,所以失败.就编译器而言,从未定义Interface :: BaseFunction.

到目前为止,我发现的唯一解决方案是在Derived中声明一个传递函数

class Derived : public Base, public Interface
{
    public: 
        void DerivedFunction(){}
        void BaseFunction(){ Base::BaseFunction(); }
};

有什么更好的解决方案吗?

编辑:如果重要,这里是一个真正的世界问题我使用MFC对话框.

我有一个来自CDialog的对话框类(MyDialog让我说).由于依赖问题,我需要创建一个抽象接口(MyDialogInterface).使用MyDialogInterface的类需要使用特定于MyDialog的方法,但也需要调用CDialog :: SetParent.我刚刚通过创建MyDialog :: SetParent来解决它,并将其传递给CDialog :: SetParent,但是想知道是否有更好的方法.

最佳答案
C没有注意到从Base继承的函数已经实现了BaseFunction:该函数必须在从Interface派生的类中显式实现.改变方式:

class Interface
{
    public:
        virtual void BaseFunction() = 0;
        virtual void DerivedFunction() = 0;
};

class Base : public Interface
{
    public:
        virtual void BaseFunction(){}
};

class Derived : public Base
{
    public: 
        virtual void DerivedFunction(){}
};

int main()
{
    Derived derived;
}

如果你想要只能实现其中之一,可以将它们拆分成两个接口:

class DerivedInterface
{
    public:
        virtual void DerivedFunction() = 0;
};

class BaseInterface
{
    public:
        virtual void BaseFunction() = 0;
};

class Base : public BaseInterface
{
    public:
        virtual void BaseFunction(){}
};

class Derived : public DerivedInterface
{
    public: 
        virtual void DerivedFunction(){}
};  

class Both : public DerivedInterface, public Base {
    public: 
        virtual void DerivedFunction(){}
};

int main()
{
    Derived derived;
    Base base;
    Both both;
}

注意:main必须返回int
注意:在基础中虚拟的派生中保持虚拟的成员函数是很好的做法,即使它不是严格要求的.

转载注明原文:C:派生基类实现单一接口? - 代码日志