2

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

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 的实现,而不使用调用 ConcreteA::foo() 的包装器?

4

2 回答 2

5

创建InterfaceA一个虚拟基类。

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

class ConcreteA : public virtual InterfaceA {  
public:  
   virtual void foo(){}//implements foo() from interface  
};
于 2012-12-26T18:46:53.697 回答
4

你需要虚拟继承

位于层次结构顶部的接口 A 实际上应该由所有直接子类继承。

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

class ConcreteA : public virtual InterfaceA{  
public:  
   virtual void foo(){}//implements foo() from interface  
};
于 2012-12-26T18:58:05.623 回答