2009-11-24 138 views
0

我有一个虚拟基类和两个实现各种方法的类。这两个类对于其中一种方法具有相同的功能。有没有我可以分享两个类之间的实现来消除多余的代码?除了虚拟基类以外,我还尝试将第一个类作为第二个类的父类,但得到了一堆错误。在C++中的虚拟基类的两个实现之间共享方法

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

+0

你是什么意思的虚拟基地即抽象类或虚拟继承自其他类? – Ashish 2009-11-24 05:56:19

+0

一切都用虚拟methodname()= 0; – blcArmadillo 2009-11-24 06:09:35

+0

@blcArmadillo:它是一个* abstract *基类,不是虚拟基类。虚拟基类在C++中的含义完全不同 – Naveen 2009-11-24 06:15:03

回答

4

说,A是基类,而BC是继承自基类的类。其逻辑在BC之间共享的方法称为SomeMethod。下列情况之一的应做的伎俩,不管你用例:

  • 就拿逻辑B::SomeMethodC::SomeMethod和复制并粘贴到A::SomeMethod
  • 创建一个类D提供的共享版本SomeMethod并有BCD派生,将从A
  • 派生创建一个类SomeMethodImpl,只是提供你想要的执行,再B::SomeMethod和01的落实将只是委托方法调用的SomeMethodImpl::SomeMethod
1

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

0

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

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 { }; 
相关问题