多继承,继承接口和实现

时间:2013-10-14 22:55:59

标签: c++ inheritance polymorphism multiple-inheritance mixins

是否可以在同一个类中继承接口和实现mixin?像这样:

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

class Component
{
public:
    void method(){ /*do something*/};
};

class MyClass : public Interface, public Component
{};

...
...
Interface* p = new MyClass(); p.method();

这个想法是继承自Interface的纯虚函数是通过它的继承Component在MyClass中实现的。这不编译;我需要这样做:

class MyClass : public Interface, public Component
{
 public:
    void method(){Component::method();} override
 };

是否有可能以某种方式避免显式覆盖和委托给Component,也许是以某种方式使用模板?

1 个答案:

答案 0 :(得分:2)

如果你想避免对组件进行显式覆盖和委托,那么就无法继承某种类型的接口派生类来进行这种绑定,因为你想要调用ahas的东西最终会出现在你的派生类中#& 39; s vtable。

我想你可以使用类似钻石的继承结构和虚拟继承来实现它,但它并不完全漂亮:

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

class Component: virtual public Interface
{
public:
    virtual void method(){ /*do something*/};
};


class MyClass : virtual public Interface, private Component
{
public:
    using Component::method;
};

常用免责声明:虚拟继承为expensive

我试图使用模板找到更好的东西,但我不认为有一种方法可以将组件方法绑定到虚方法,而无需从接口继承组件,或者不必手工编写绑定代码。