我有一个虚拟基类和两个实现各种方法的类。这两个类对其中一个方法具有相同的功能。有没有我可以分享两个类之间的实现来消除冗余代码?除了虚拟基类之外,我尝试使第一个类成为第二个类的父类,但是出现了一堆错误。
编辑 - 感谢大家的回复。我应该提到的一件事是我不能修改虚拟基类,所以只是将代码添加到基类是行不通的。
答案 0 :(得分:4)
说,A
是基类,B
和C
是从基类继承的类。在B
和C
之间共享逻辑的方法称为SomeMethod
。无论您的用例如何,以下其中一项应该可以解决问题:
B::SomeMethod
和C::SomeMethod
的逻辑并将其复制并粘贴到A::SomeMethod
D
,该类提供SomeMethod
的共享版本,并B
和C
派生自D
,它将派生自{{1} }} A
,然后SomeMethodImpl
和B::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)
我相信虚拟基类是指具有纯虚函数(抽象类)的基类,而不是从基类派生的。如果是这种情况,您可以将公共实现放在此基类中,以便它可用于所有派生类。