使用具体类的继承来实现纯虚方法C ++

时间:2012-12-26 18:27:09

标签: c++ interface multiple-inheritance pure-virtual

我想使用实现从接口实现纯虚方法 由具体类提供,而不必从具体类中显式调用该方法。例如:

class InterfaceA{  
public:  
    virtual void foo() = 0;  
};

class InterfaceB:public InterfaceA{  
public:  
   virtual void bar() = 0;  
};

class ConcreteA : public InterfaceA{  
public:  
   virtual void foo(){}//implements foo() from interface  
};

class ConcreteAB: public InterfaceB, public ConcreteA{  
public:  
    virtual void bar(){}//implements bar() from interface  
};

在这种情况下,编译器要求在ConcreteAB类中实现foo(),因为InterfaceB没有实现它并且它继承自InterfaceA。

有一种方法可以告诉编译器在不使用调用ConcreteA :: foo()的包装器的情况下使用ConcreteA的实现吗?

2 个答案:

答案 0 :(得分:4)

使InterfaceA成为虚拟基类。

class InterfaceB : public virtual InterfaceA {  
public:  
   virtual void bar() = 0;  
};

class ConcreteA : public virtual InterfaceA {  
public:  
   virtual void foo(){}//implements foo() from interface  
};

答案 1 :(得分:3)

您需要virtual inheritance

层次结构顶部的接口A应该由所有直接子类虚拟继承。

class InterfaceB:public virtual InterfaceA{  
public:  
   virtual void bar() = 0;  
};

class ConcreteA : public virtual InterfaceA{  
public:  
   virtual void foo(){}//implements foo() from interface  
};