在C ++中共享虚拟基类的两个实现之间的方法

时间:2009-11-24 05:38:31

标签: c++ inheritance class

我有一个虚拟基类和两个实现各种方法的类。这两个类对其中一个方法具有相同的功能。有没有我可以分享两个类之间的实现来消除冗余代码?除了虚拟基类之外,我尝试使第一个类成为第二个类的父类,但是出现了一堆错误。

编辑 - 感谢大家的回复。我应该提到的一件事是我不能修改虚拟基类,所以只是将代码添加到基类是行不通的。

4 个答案:

答案 0 :(得分:4)

说,A是基类,BC是从基类继承的类。在BC之间共享逻辑的方法称为SomeMethod。无论您的用例如何,以下其中一项应该可以解决问题:

  • 采用B::SomeMethodC::SomeMethod的逻辑并将其复制并粘贴到A::SomeMethod
  • 创建一个类D,该类提供SomeMethod的共享版本,并BC派生自D,它将派生自{{1} }}
  • 创建一个只提供所需实现的类A,然后SomeMethodImplB::SomeMethod的实现只会将方法调用委托给{{1}的私有实例}

答案 1 :(得分:2)

如果要将基类保持为纯虚拟,请创建另一个继承自此基类的类并实现该函数,然后让另外两个类继承自此类:

class Base { public: virtual void TheFunction(); /* blah blah other virtual functions */ };
class OneFunctionImplemented : public Base { public: virtual void TheFunction() { DoSomething(); } };
class ChildClass1 : public OneFunctionImplemented { };
class ChildClass2 : public OneFunctionImplemented { };

答案 2 :(得分:1)

将共享功能放在基类中。其他两个类都可以从那里访问它。

答案 3 :(得分:0)

我相信虚拟基类是指具有纯虚函数(抽象类)的基类,而不是从基类派生的。如果是这种情况,您可以将公共实现放在此基类中,以便它可用于所有派生类。