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

Using inheritance from concrete class to implement pure virtual method C++

本文关键字:实现 虚拟 方法 继承      更新时间:2023-10-16

我想使用实现从接口实现纯虚拟方法由混凝土类提供,而无需从混凝土类中明确调用该方法。示例:

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()?

使InterfaceA成为虚拟基类。

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

您需要虚拟继承。

接口A,在层次结构的顶部,应实际上由所有立即子类继承。

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