Has-a关系的继承

时间:2019-03-05 12:34:54

标签: c++ oop

我在这里阅读有关Has-a和Is-a关系的信息:What do “has-a” and “is-a” mean? [duplicate] 。据我了解,我的班级数据成员遵循Has-a关系。假设我从Base类继承了数据成员。他们是否仍将遵循Has-a关系? 在此示例中:汽车是-车辆。还会有方向盘吗?

class SteeringWheel
{};

class Vehicle
{

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

};

class Car: public Vehicle
{

virtual void doStuff();

};

1 个答案:

答案 0 :(得分:2)

是的,is-a和has-a关系都是 transitional 。也就是说,例如,您不能说

Car是-a Vehicle(具有-a SteeringWheel除了,它没有-a SteeringWheel

Car是-a Vehicle(它是-a Machine除了,它不是-Machine

必须实现上述示例,这意味着您的设计存在缺陷。这实际上与Open-closed principle中的SOLID背道而驰-您根本不应该从基类中夺走(或忽略其某些部分的存在),而只需通过继承扩展