我在这里阅读有关 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 principle在 SOLID - 您根本不应该从基类中删除(或忽略它的某些部分的存在),只能通过继承扩展它。
关于c++ - Has-a关系的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55002954/