Заголовочный файл - Наследование c ++ - PullRequest
0 голосов
/ 25 февраля 2020

Мой опыт работы с c ++ очень ограничен, поэтому я прошу прощения, если мой вопрос тупой или элементарный. Вот как это делается:

Когда вы выполняете более крупный проект на языке, подобном с ++, и у вас, возможно, очень большая строка наследования, является нормальной практикой включение каждого производного класса в, скажем, основной файл. Есть ли способ обойти это, или я что-то упускаю банально?

Спасибо.

1 Ответ

0 голосов
/ 25 февраля 2020

Чтобы программа на C ++ использовала класс C ++, требуется объявление. Если класс наследует от базовых классов, то эти объявления требуются для обработки этого класса. Это применяется рекурсивно: требуется все дерево наследования класса.

Если граф наследования настолько глубок и широк (возможно, из-за множественного наследования), что проект решит, что он неприемлем, то его необходимо реструктурировать , Классы могут использовать агрегацию вместо наследования. Таким образом, вместо:

#include <widget.h>

class foo : public widget { ... };

это может быть возможно;

class widget; // "forward" declaration only; no #include needed
class foo { widget *pwidget; ...}

Теперь, только файл, который реализует foo, нуждается в полном объявлении widget; клиенты foo, включая "foo.h", не нуждаются в этом.

Но теперь foo уже не является своего рода widget, что влияет на организацию кода. foo по-прежнему содержит widget частей путем создания объекта и его удержания. Если widget соответствует некоторому абстрактному интерфейсу для виджетов, foo может реализовать это и делегировать содержащемуся widget.

Другим инструментом минимизации зависимостей является инверсия зависимостей .

...