我在这里阅读有关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();
};
答案 0 :(得分:2)
是的,is-a和has-a关系都是 transitional 。也就是说,例如,您不能说
Car
是-a Vehicle
(具有-a SteeringWheel
)除了,它没有-a SteeringWheel
。
或
Car
是-a Vehicle
(它是-a Machine
)除了,它不是-Machine
。
必须实现上述示例,这意味着您的设计存在缺陷。这实际上与Open-closed principle中的SOLID背道而驰-您根本不应该从基类中夺走(或忽略其某些部分的存在),而只需通过继承扩展。