Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lect08.pdf
Скачиваний:
7
Добавлен:
06.02.2016
Размер:
396.45 Кб
Скачать

Добавляем сериализацию...

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++.

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

Порождениепроизводного класса из нескольких базовых называется

множественным наследованием.

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

(Например,класс может реализовывать сразунесколько интерфейсов и/или использоватьнесколько реализаций).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]