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

Вопрос 21. Конструкторы и деструкторы в производных классах.

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

Конструктор производного класса всегда сначала вызывает конструктор своего базового класса для задания начальных значений тем эл-там про­изводного класса, к-ые идентичны эл-там базового класса. Если кон­структор производного класса отсутствует, то конструктор по умолчанию про­изводного класса вызывает конструктор базового класса. Деструкторы вызываются в последовательности, обратной вызовам конструкторов, так что деструктор производного класса вызывается раньше соответствующего де­структора базового класса. Т.к. уничтожение объекта баз-го класса влечёт за собой уничтожение объекта производного класса, то дестр-р произв должен выполн перед дестр-ром баз-го.

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

class a

{ int i;

public:

a(int _i): i(_i)

{ cout<<"Init a";

show(); }

void show()

{ cout<<i; } };

class b

{ int j;

public:

b(int _j): j(_j)

{ cout<<"Init b";

show(); }

void show()

{ cout<<j; } };

class c: public a, public b

{ public: c(int _a, int _b): a(_a),b(_b)

{ cout<<"Init c"; }

void show()

{ a::show();

b::show(); } };

int _tmain(int argc, _TCHAR* argv[])

{ c u(1,1);

u.show();

getch();

return 0; }

Вопрос 22. Неявное преобразование объектов производных классов в объекты базового класса.

Св-ва:

  1. Производный класс и базовый класс объединяют разные типы данных.

  2. Объект производного класса может рассматриваться как объект базового класса:

  • объект производного класса имеет в своём составе все данные и ф-ции соответствующие базовому классу.

  • в производном классе определяются новые данные и ф-ции

  • объект базового класса может быть присвоен объекту производного класса

  • Объекты базового класса не могут рассматриваться как объекты производного класса:

    • Теряются описанные в производном классе данные и методы.

    • Объект производного класса не может быть присвоен объекту производного класса.

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

    Несмотря на тот факт, что объекты производных классов «являются» также и объектами базового класса, типы объектов производного и базового классов различны

    Способы комбинирования и попарного со­поставления указателей и объектов базового и производного классов:

    1. Ссылка на объект базового класса с помощью указателя на базовый класс допустима.

    2. Ссылка на объект производного класса с помощью указателя на производный класс допустима.

    3. Ссылка на объект производного класса с помощью указателя на базовый класс. Возможно возникновение синтаксических ошибок. Код должен ссылаться только на члены базового класса.

    4. Ссылка на объект базового класса с помощью указателя на производный класс. В явном виде вызывает синтаксическую ошибку. Требуется явное приведение типа указателя производного класса в указатель базового класса.