4.10 Множественное наследование

Предыдущая  Содержание  Следующая V*D*V

Поскольку мы используем простой ANSI-C, нельзя скрыть тот факт, что наследование означает одну структуру в начале другой. Повышающее приведение является ключом к повторному использованию метода суперкласса для объектов подкласса. Повышающее приведение от окружности обратно к точке осуществляется путём приведения адреса начала структуры; значение адреса не меняется.

Если мы включаем две или даже более структур в какую-то другую структуру и если мы готовы выполнять некоторые манипуляции с адресами во время повышающего приведения, то можно было бы назвать такой результат множественным наследованием: объект может вести себя так, как если бы он принадлежал к нескольким другим классам. Преимуществом представляется то, что не надо очень тщательно проектировать отношения наследования — можно быстро скидать классы вместе и наследовать всё, что кажется желательным. Очевидным недостатком является то, что должны быть выполнены манипуляции с адресами во время повышающего приведения прежде чем можно будет использовать методы суперкласса.

Всё действительно очень быстро может стать довольно запутанным. Рассмотрим текст и прямоугольник, каждый с унаследованной точкой отсчета. Мы можем собрать их вместе в кнопку — вот только вопрос, должна кнопка наследовать одну или две опорные точки. C++ разрешает любой подход с достаточно ловким маневрированием во время конструирования и повышающего приведения.

У нашего подхода делать всё на ANSI-C есть существенное преимущество: он не заслонять тот факт, что наследование — множественное или иным образом — всегда происходит путём включения. Включение, однако, также может быть выполнено в виде агрегата. Не совсем ясно, даёт ли множественное наследование программиста больше, чем усложняет определение языка и увеличение накладных расходов реализации. Мы будем стремиться делать всё просто и продолжим только с простым наследованием. Глава 14 покажет, что одна из главных целей множественного наследования, библиотечное объединение, часто может быть достигнута с помощью агрегатов и переадресации сообщений.

 

Предыдущая  Содержание  Следующая