替代直接继承

时间:2012-10-29 09:32:16

标签: c++ inheritance virtual-inheritance

我有两个类 A类 B类。我希望 B类具有 A类的功能以及它自己的更多功能。其中一种非常简单的方法是从 A类继承 B类。但出于某些实现原因,我不能这样做。

我想到了另一个解决方案,在其中我将创建另一个类类C ,它将包含所有虚函数。 类A和B 将继承自 C类 A类将包含虚函数的实现,而 B类也可以定义相同的函数集,因此 B类将具有以下功能: A级。 这是最佳解决方案吗?除了从 A类直接继承 B类之外,还有其他更好的解决方案吗?

4 个答案:

答案 0 :(得分:11)

您要找的是Composition (over Inheritance)

  

继承中的组合(或复合重用原则)   面向对象编程是一种类可以使用的技术   通过包含其他来实现多态行为和代码重用   实现所需功能而不是通过的类   继承。

这意味着您可以class B包含class A的实例,而不是让class B继承class A。这也是良好的编码习惯,以避免class Aclass B之间的紧密耦合。

答案 1 :(得分:0)

你可以这样做但是如果你创建class C作为抽象基类并且让A和B继承它,那么你会意识到class Aclass B将是除了它们从相同的抽象基类继承之外,它们是无关的。这意味着您将无法将class B的实例转换为A等。通常,此类实现取决于用例。

E.g:

class CPersonclass ATeacherclass BStudent。然后学生不是老师,老师不是学生,所以这样的实施是有效的。

答案 2 :(得分:0)

  

A类将包含虚函数的实现,而B类也可以定义相同的函数集

这样你就会有代码重复,这不是一件好事。

如果您不想使用继承,请尝试使用合成。

我之前解释了作文here

答案 3 :(得分:0)

您可以使用代理类,通过创建另外两个类PAPB PB继承PA。这些代理类分别复制AB接口,但实际上实现它们。相反,他们只需在AB

的实例中调用函数