Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мини конспект по ООП.doc
Скачиваний:
35
Добавлен:
25.03.2015
Размер:
241.66 Кб
Скачать

24. Конструкторы и деструкторы производных классов? Порядок вызова конструкторов и деструкторов при множественном наследовании?

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

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

Конструкторы вызываютсяв том порядке, в каком классы следуют один за другим в иерархии классов.

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

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

25. Множественное наследование. Общая форма?

Существует два типа наследования:

- одиночное;

- множественное.

при одиночном наследованиипроизводный класс имеет только один непосредственный базовый класс (приведенный выше пример с лодками);

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

Общая форма множественного наследованияимеет вид:

classимя_порожденного_класса:список базовых классов

{

. . . тело класса

};

26. Передача параметров в базовый класс. Назначение. Общая форма?

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

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

Эта форма выглядит следующим образом:

порожденый_конструктор(список_аргументов):базовый_класс1(список_аргументов),

базовый_класс2(список_аргументов), . . ., базовый_классN(список_аргументов)

{

. . . тело класса

};

27. Указатели и ссылки на производные классы?

В общем случаеуказатель одного класса не может указывать на объект другого класса.

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

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

Например, вызов функции show_phone()классаNasl_objectс приведением типов выглядит следующим образом:

((Nasl_class *)p)-> show_phone();

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

Указатель на базовый класс может использоваться и как указатель на производный объект. ОДНАКО указатель на производный класс не может использоваться для доступа к объектам базового типа.

Операции инкремента и декремента указателя выполняются по отношению к его базовому классу.

То есть, если указатель на базовый класс указывает на объект подкласса, инкремент или декремент его не даст указатель на следующий объект подкласса. Поэтому нельзя использовать эти операции, когда они указывают на объект производного класса.

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