直接继承的替代方案

问题描述 投票:0回答:4

我有两个班级A班B班。我希望 B 类 具有 A 类 的功能以及它自己的更多功能。实现此目的的一种非常简单的方法是从 A 类继承 B 类。但由于某些具体实施原因,我无法这样做。 我想到了另一个解决方案,我将创建另一个类

C

,它将包含所有虚函数。 类 A 和 B 将继承自 类 C类 A 将包含虚函数的实现,类 B 也可以定义相同的函数集,因此 类 B 将具有 类 A 的功能。 这是最优解吗?除了直接从A类继承B类之外,还有比这更好的解决方案吗?

c++ inheritance virtual-inheritance
4个回答
11
投票

组合(继承)

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

这意味着您可以让
class B

包含

class A
的实例,而不是让
class B
继承自
class A
。这也是
良好的编码实践
,以避免 class A
class B
之间的紧密耦合。
    


0
投票
class C

创建为抽象基类,并且让 A 类和 B 类继承自它,那么您会意识到

class A
class B
除了继承之外,是不相关的来自同一个抽象基类。这意味着您无法将
class B
的实例转换为
A
等。一般来说,此类实现取决于用例。

例如:

您的

class C

Person
class A
Teacher
class B
Student
。那么学生不是老师,老师也不是学生,所以这样的实现是有效的。
    


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

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

如果你不想使用继承,可以尝试组合。

我之前解释过构图

这里


0
投票
PA

PB
来使用代理类,其中
PB
继承自
PA
。这些代理类分别复制了
A
B
接口
,但实际上并不
实现
它们。相反,他们只是调用 A
B
实例中的函数。
    

© www.soinside.com 2019 - 2024. All rights reserved.