- •8. Множественное наследование
- •Добавляем сериализацию...
- •Множественное наследование
- •Множественное наследование
- •Пример
- •Возможная реализация
- •Возможная реализация
- •"Ромбовидное" наследование
- •Пример
- •Пример
- •Пример
- •Виртуальное наследование
- •Улучшенный пример
- •Улучшенный пример
- •Улучшенный пример
Добавляем сериализацию...
Shape
+Draw()
|
|
|
|
|
|
Circle |
|
Square |
|
|
|
|
|
|
|
AnnotatedShape |
|
|
|
|
|
SerializeableShape |
|
||||||
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-text : char* |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
+Serialize(в fileName : const char*) |
|
||
|
+GetText() : char* |
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
||||||||
|
+SetText(в text : const char*) |
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
SerializeableCircle |
|
SerializeableSquare |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
AnnotatedCircle |
|
AnnotatedSquare |
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Двойноедублированиекода!! Смыслвналичиибиблиотечных классовCircle иSquare утерян.
Сериализуемаяфигура с текстом???
Варианты:
сделать базовый класс сериализации наследником AnnotatedShape;
сделать отдельно сериализуемый базовый класс с текстовым описанием.
Недостатки:
чудовищноедублирование кода;
принеобходимости манипулировать большим числом функций предусмотреть все возможные наборы не получится из-за высокой трудоёмкости.
Добавлениеодних итехже функцийразнымклассам
Лучшеерешениеисключить дублированиеосновногокода, добавив(и,возможно,реализовав) тольконеобходимыедополнительные функции.
Инструментмножественное наследованиевC++.
Множественное наследование
Порождениепроизводного класса из нескольких базовых называется
множественным наследованием.
Класс, полученный путем множественного наследования может обладать свойствами сразунескольких родительских классов.
(Например,класс может реализовывать сразунесколько интерфейсов и/или использоватьнесколько реализаций).