我想使用实现从接口实现纯虚方法 由具体类提供,而不必从具体类中显式调用该方法。例如:
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的实现吗?
答案 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)
层次结构顶部的接口A应该由所有直接子类虚拟继承。
class InterfaceB:public virtual InterfaceA{
public:
virtual void bar() = 0;
};
class ConcreteA : public virtual InterfaceA{
public:
virtual void foo(){}//implements foo() from interface
};