多继承设计实现

时间:2011-10-12 20:10:56

标签: c++ multiple-inheritance

我有3个班级ABC,其中BAC是{{1} }}

这些类旨在保留历史记录,因此A提供了一个虚拟方法,派生类可以创建该方法,以便在归档历史记录时通知,称为A

现在突然需要在一个班级中提供void archive()AB的信息,我不确定最佳方法。

我考虑创建一个继承自CD的新类B,并将其继承更改为C以避免diamond problem并拥有virtual public A {1}}只需致电D::archive()B::archive()

这是一个好方法吗?或者我应该重新设计4个类,以便我不使用多重继承?

4 个答案:

答案 0 :(得分:5)

您的方法是标准方法。 C ++具有多重继承,您可以随意使用它。看起来你知道如何正确地做到这一点。

答案 1 :(得分:5)

如何使用构图呢? 例如。 class D委托代理BC而不是继承。
组合可以实现相同的结果,代码更简单(恕我直言)

答案 2 :(得分:1)

请注意最终覆盖方法可能具有的调用链: 如果B::method调用A::methodC::method调用A::method,则当您将它们放在D中时,如果D::method同时调用C::method,则将其设为虚拟和B::method,你得到A::method两次。

当一个基础变为虚拟时,你必须避免这种重新入侵。

答案 3 :(得分:0)

你可以从A派生D,包含两个成员B和C. D :: archive将调用B :: archive和C :: archive