Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора 57стр.doc
Скачиваний:
54
Добавлен:
15.06.2014
Размер:
478.21 Кб
Скачать

Вопрос 23. Иерархия классов. Уровни наследования.

Базовый класс описывает общие черты объектов. Все классы, порожден­ные базовым классом, наследуют возможности этого базового класса. Производные классы затем пополняются дополнительными по сравнению с унаследован­ными от базового класса возможностями. Производный класс сам может быть базовым классом. Например:

class employee{ ... };class secretary:employee { ... }; class manager:employee{... };class temporary:employee{ ... }; class consultant:temporary{ ... };class director: manager { ... }; class vice_president : manager { ... }; class president :vice_president { ... };

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

class temporary_secretary : temporary : secretary { ... }; class consultant : temporary : employee { ... };

Вопрос 24. Множественное наследование.

Класс может порождаться более, чем от одного базового класса; такое порождение называется множественным наследованием. Множественное наследование означает, что производный класс наследует эл-ты нескольких базовых классов. Для этого используется список базовых классов, в к-ом каждый из базовых классов отделён от других запятой. Множ-ное наследование указывается двоеточием (:) после имени класса с последующим перечислением ч/з запятую базовых классов.

class X{};

class Y{};

class Z : public X, public Y{};

поскольку класс Z наследует оба класс X и Y, то он имеет доступ к публичным и защищённым членам обоих классов X и Y.

Конструкторы базовых классов вызываются слева направо; деструкторы – наоборот.

Существуют две специфические для множ-ного наследования проблемы:

** как разрешить конфликты имен м/у суперклассами

** что делать с повторным наследованием.

Для устранения конфликта разрешается добавить к именам префиксы, указывающие имена классов, откуда они пришли.

Вопрос 25. Неопределённость при множ-м наследовании. Включение «классы в классах».

При наследовании от различных классов члены с идентичными именами могут возникать неопределенности. Подобные наследования допускаются при условии, что не дает двусмысленных ссылок на такой объект. При множественном наследовании 2 базовых класса могут быть получены от общего предка. Такой класс будет иметь 2 подобъекта общего предка. Если подобное дублирование нежелательно, его можно явно развести две копии унаследованного элемента, добавляя к именам префиксы в виде имени класса-источника, можно избежать с помощью виртуального наследования, а так же включением – когда полем в классе явл объект другого класса

Классы как элементы других классов

Класс может включать в себя объекты других классов в кач-ве эл-тов. Это один из способов повторного использования программного обеспечения, когда класс ключает в себя объекты других классов в кач-ве Эл-тов. Объекты-эл-ты создаются в том порядке, в к-ом они объявлены (а не в том, в к-ом перечислены в списке инициализаторов эл-тов конструктора), и до того, как будут созданы объекты включающего их класса.

Если инициализаторы Эл-тов не заданы, конструктор с умолчанием объекта-эл-та будет вызван автоматически. Значения, если они были установленные конструктором с умолчанием, могут быть, затем изменены с помощью функции set