наследование Has-отношения - PullRequest
1 голос
/ 05 марта 2019

Я читал здесь об отношении «имеет-а» и «есть-отношение»: Что означают «есть-а» и «есть-а»?[дубликат] .Что я понимаю, так это то, что мои данные-члены класса следуют отношению Has-a.Допустим, я наследую элементы данных от базового класса.Они все еще собираются следовать за Хасом?в этом примере: Автомобиль - это транспортное средство.У него все еще будет руль?

class SteeringWheel
{};

class Vehicle
{

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

};

class Car: public Vehicle
{

virtual void doStuff();

};

1 Ответ

2 голосов
/ 05 марта 2019

Да, отношения is-a и has-a переходные .Это означает, что вы не можете, например, сказать, что

Car is-a Vehicle (который имеет -a SteeringWheel) за исключением у него нет-a SteeringWheel.

или

Car is-a Vehicle (который является -a Machine) за исключением это-не-* Machine.

Необходимость реализации приведенных выше примеров будет означать, что ваш дизайн имеет недостатки.По сути, это идет вразрез с принципом открытого-закрытого в SOLID - вам просто не следует отнимать от базового класса (или игнорировать существование некоторых егочасти), только расширить это по наследству.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...