68953

Конструктори похідних класів

Лекция

Информатика, кибернетика и программирование

У звязку із наслідуванням виникають два питання, що стосуються конструкторів і деструкцій. По-перше, коли викликаються конструктори і деструкції базового і похідного класів? По-друге, як передаються параметри конструкторів базового класу? Відповіді на ці питання містяться в наступному розділі.

Украинкский

2014-09-28

44 KB

0 чел.

Лекція № 15

Тема: Конструктори похідних класів

План

  1.  Виклик конструкторів похідних класів
  2.  Виклик конструкторів ієрархічних класів
  3.  Виклик конструкторів при множинному наслідуванні

Виклик конструкторів похідних класів

У зв'язку із наслідуванням виникають два питання, що стосуються конструкторів і деструкцій. По-перше, коли викликаються конструктори і деструкції базового і похідного класів? По-друге, як передаються параметри конструкторів базового класу? Відповіді на ці питання містяться в наступному розділі.

Коли викликаються конструктори і деструкції

Базовий і похідний клас можуть містити декілька конструкторів і деструкція. Отже, дуже важливо правильно розуміти, в якому порядку вони викликаються при створенні і знищенні об'єктів похідного класу. Спершу розглянемо наступний приклад.

#include <iostream>

using namespace std;

class base {

public:

based { cout « "Створюється об'єкт класу base\n"; }

~base() { cout << "Знищується об'єкт класу base\n"; }

};

class derived: public base {

public:

derived() { cout « "Створюється об'єкт класу derived\n"; }

~derived() { cout << "Знищується об'єкт класу derived\n"; }.j

};

int main() {

derived ob;

// Окрім створення і знищення об'єкту, нічого не відбувається

return 0;

}

Як вказано в коментарі до функції main (), програма просто створює, а потім знищує об'єкт ob класу derived. В ході виконання програма виводить на екран наступні повідомлення.

Створення об'єкту класу base

Створення об'єкту класу derived 

Знищення об'єкту класу derived 

Знищення об'єкту класу base

Як видимий, спочатку викликається конструктор базового класу, а потім — похідного. Після цього, оскільки об'єкт ob негайно знищується, викликається деструкція класу derived, а за ним — деструкція класу base.

Результати цього експерименту можна узагальнити. При створенні об'єкту похідного класу спочатку викликається конструктор базового класу, а потім – похідного. При знищенні об'єкту похідного класу спочатку викликається деструкція похідного класу, а потім — базового. Інакше кажучи, конструктори викликаються в ієрархічному порядку, а деструкції — в зворотному.

Це цілком природно. Оскільки базовий клас не має ніякої інформації про похідні класи, ініціалізація його об'єктів повинна виконуватися до ініціалізації будь-якого об'єкту похідного класу. Отже, конструктор базового класу повинен викликатися першим.

Цілком очевидно, що деструкції повинні викликатися в зворотному порядку. Оскільки похідний клас успадковує властивості базового, знищення об'єкту базового класу викличе знищення об'єкту похідного класу. Отже, деструкція похідного класу повинна викликатися до повного знищення об'єкту.

Виклик конструкторів ієрархічних класів

При ієрархічному спадкоємстві (коли похідний клас стає базовим для свого спадкоємця) застосовується наступне правило: конструктори викликаються в ієрархічному порядку, а деструкції — в зворотному. Розглянемо приклад.

#include <iostream>

using namespace std;

class base {

public:

base() { cout « "Створення об'єкту класу base\n"; }

~base() { cout « "Знищення об'єкту класу base\n"; }

};

class derivedl : public base {

public:

derivedl() { cout « "Створення об'єкту класу derivedl\n"; }

~derivedl() { cout « "Знищення об'єкту класу derivedl\n"; }

};

class derived2: public derivedl {

public:

derived2() { cout « "Створення об'єкту класу derived2\n"; }

~derived2() { cout « "Знищення об'єкту класу derived2\n"; }

};

int main()

{

derived2 ob;

// Створюємо і знищуємо об'єкт ob

return 0;

}

В результаті на екран виводяться наступні рядки.

Створення об'єкту класу base

Створення об'єкту класу derivedl

Створення об'єкту класу derived2

Знищення об'єкту класу derived2

Знищення об'єкту класу derivedl 

Знищення об'єкту класу base

Виклик конструкторів при множинному наслідуванні

Це правило застосовно і до множинного спадкоємства. Розглянемо наступну програму.

#include <iostream>

using namespace std;

class basel {

public:

basel() { cout << "Створення об'єкту класу basel\n"; }

~basel() { cout << "Знищення об'єкту класу basel\n"; }

};

class base2 {

public:

base2() { cout << " Створення об'єкту класу base2\n"; }

~base2() { cout << " Створення об'єкту класу base2\n"; }

};

class derived: public basel, public base2 {

public:

derived0 { cout « " Створення об'єкту класу derived\n"; }

~derived() { cout « " Знищення об'єкту класу derivedXn"; }

};

int main()

{

derived ob;

// Створення і знищення об'єкту ob

return 0;

}

Ця програма видає на екран наступні повідомлення.

Створення об'єкту класу basel 

Створення об'єкту класу base2

Створення об'єкту класу derived 

Знищення об'єкту класу derived 

Знищення об'єкту класу base2 

Знищення об'єкту класу basel

 

Як видимий, і в цьому випадку конструктори викликаються в ієрархічному порядку, зліва направо, як вказано в списку спадкоємства класу derived. Деструкції викликаються в зворотному порядку, справа наліво. Допустимо, що ім'я base2 вказане в списку спадкоємства класу derived перед ім'ям base1.

class derived: public base2, public basel {

Тоді результати роботи програми виглядали б так.

Створення об'єкту класу base2 

Створення об'єкту класу basel 

Створення об'єкту класу derived 

Знищення об'єкту класу derived 

Знищення об'єкту класу basel 

Знищення об'єкту класу base2


 

А также другие работы, которые могут Вас заинтересовать

41503. ОСНОВНЫЕ ПОКАЗАТЕЛИ, УЧЕТ И АНАЛИЗ РАБОТ СТАНЦИИ 236.5 KB
  Основные показатели работы станции. Учет работы станции формы учета и отчетности. Анализ работы станции.
41504. Провозная и пропускная способность железных дорог 37.5 KB
  Провозная способность прямо пропорциональна пропускной способности участка и массе составов поездов а также существенно зависит от конструктивных схем и параметров вагонов. Провозная способность увеличивается с понижением коэффициента тары вагонов улучшением использования их грузоподъемности. Расчеты ВНИИЖТа показывают что массовое применение восьмиосных полувагонов и цистерн габаритов Тпр и Тц позволяет увеличить провозную способность железных дорог на 18 .
41505. ТЕХНОЛОГИЯ ОБРАБОТКИ ТРАНЗИТНЫХ ВАГОНОВ С ПЕРЕРАБОТКОЙ. РАБОТА ПАРКА ПРИЁМА 206.5 KB
  Телетайпы устанавливаются в ИЦ станции расположенным обычно рядом с СТЦ. Таким образом до прибытия поезда СТЦ получает точную информацию о составе поезда в виде ТГНЛ в которой в порядке размещения в составе содержатся основные сведения о вагонах: его номер вес груза и наименование станция назначения получатель особые отметки. Оператор СТЦ различает полученную телеграмму натурку в соответствии с планом формирования поездов данной станции. Станция обычно получает 3 экземпляра натурки после разметки один экземпляр передается сначала...
41506. ТЕХНОЛОГИЯ РАБОТЫ ПАРКОВ ОТПРАВЛЕНИЯ 144.5 KB
  На сортировочной станции А производится смена поездных локомотивов у всех поездов как транзитных так и прибывших в расформирование. На сортировочной станции Б четные и нечетные поезда отправляются с локомотивами депо 1; у транзитных поездов смена локомотивов не производится только смена бригад. Могут быть любые другие сочетания участков обращения локомотивов с участками работы локомотивных бригад. В зависимости от схемы обслуживания поездов поездными локомотивами и локомотивными бригадами на сортировочных станциях с локомотивами могут...
41507. ТЕХНОЛОГИЯ РАБОТЫ СОРТИРОВОЧНЫХ ПАРКОВ. ПРОЦЕСС НАКОПЛЕНИЯ ВАГОНОВ В СОРТИРОВОЧНОМ ПАРКЕ 109 KB
  Процесс накопления вагонов отдельного назначения его показатели. Процесс накопления вагонов отдельного назначения его показатели. График накопления вагонов отдельного назначения.
41508. Технология работы станции с местными вагонами 120 KB
  Планирование и организация подачи и уборки вагонов на грузовой пункт. По характеру грузовых операций различают 4 вида местных вагонов: прибывшие в груженом состоянии под выгрузку; прибывшие в порожнем состоянии под погрузку; прибывшие гружеными выгруженными загруженные вновь со сдвоенными операциями; сборные вагоны и вагоны с контейнерами проходящие грузосортировку. С ними выполняются те же операции что и с транзитными вагонами с переработкой но кроме того с местными вагонами производятся: подача к грузовым пунктам...
41509. График движения поездов 174.5 KB
  Он представляет собой графическое изображение следования поездов на масштабной сетке на которой движение поездов изображаются прямыми наклонными линиями линиями хода поездов. Графики движения поездов различают: в зависимости от соотношения скоростей движения разных поездов по одному и тому же перегону параллельные и непараллельные. В параллельных графиках поезда имеют одинаковую скорость и линии их хода на данном перегоне параллельны а в непараллельных графиках линии хода поездов с разными скоростями; по числу...
41510. ЗАКРЕПЛЕНИЕ ВАГОНОВ 33 KB
  При уходе подвижного состава на перегон ДСП обязан используя все имеющиеся в его распоряжении средства сообщить об этом машинистам поездов находящимся на перегоне ДПИ дежурным путевых постов соседней станции переездов и другим работникам чтобы задержать встречные поезда и принять меры к остановке ушедших вагонов. При закреплении составов поездов: на главные и к о путях руководство и контроль за закреплением осуществляет ДСП в отдельных маневровых районах – ДСЦ; ДСП может разрешить отцепку локомотива только после убеждения в...
41511. ОРГАНИЗАЦИЯ РАБОТЫ СТАНЦИОННЫХ ТЕХНОЛОГИЧЕСКИХ ЦЕНТРОВ 49.5 KB
  Назначение и размещение СТЦ и ИЦ. Операции выполняемые в СТЦ и ИЦ. Оборудование СТЦ. Назначение и размещение СТЦ и ИЦ.