c++ - Has-a关系的继承

标签 c++ oop

我在这里阅读有关 Has-a 和 Is-a 的关系:What do “has-a” and “is-a” mean? [duplicate] .我的理解是我的类数据成员遵循 Has-a 关系。假设我从 Base 类继承了数据成员。他们还会遵循 Has-a 关系吗? 在此示例中:Car is-a vehicle。它还会有方向盘吗?

class SteeringWheel
{};

class Vehicle
{

public:
SteeringWheel  sWheel;
virtual void doStuff() = 0;

};

class Car: public Vehicle
{

virtual void doStuff();

};

最佳答案

是的,is-a 和 has-a 关系都是过渡。这意味着,你不能说,例如,

Car 是一个 Vehicle(有一个 SteeringWheel)除了它没有-a SteeringWheel

Car is-a Vehicle(这是-a Machine)除了它不是-a 机器

必须实现上述示例将意味着您的设计存在缺陷。这基本上违背了 Open-closed principleSOLID - 您根本不应该从基类中删除(或忽略它的某些部分的存在),只能通过继承扩展它。

关于c++ - Has-a关系的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55002954/

相关文章:

c++ - 使用 getline 从 for 循环中的流中安全读取

c++ - 如何在Objective-C/C/C++中进行字符和字节位置的转换

c++ - 未使用的 STL 容器是否分配内存?

python - Python 中的属性引用

java - 抽象类,OOP

delphi - Objective Pascal - 如何确保在转换为祖先时调用后代的方法?

c++ - bitwise not操作的编译器优化

c++ - 标准在 §3.4.1/6 的示例中讨论的是 A::N::f 的最外层 block 作用域

php - 访问类变量

java - 关于通过java实现的反射的工厂设计模式