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


 

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

54476. Музыка звучит в сказках 235.5 KB
  Цели: организовать деятельность учащихся на углубление изучения темы Музыка в литературных произведениях; помочь учащимся на примере украинской народной сказки подчеркнуть позитивную роль музыки как носителя добра счастья и справедливости в литературных сюжетах; содействовать осмыслению учащихся музыкального образа в литературе в частности в сказках; содействовать развитию у учащихся образного восприятия самостоятельного мышления умения слышать и выделять главное. Музыкальный материал: Б.
54477. Экономические ресурсы. Ограниченность экономических ресурсовЭкономические ресурсы. Ограниченность экономических ресурсов 41.11 KB
  Экономические ресурсы – это все то, чем располагает общество для производства товаров и услуг. Общая величина ресурсов характеризует потенциальные возможности развития экономики. Они являются исходным звеном в процессе производства благ
54478. Сценарий химико-биологического вечера. «По следом трех мушкетеров» 37.53 KB
  Итак, представляем трех мушкетеров. Перед вами Портос - чрезвычайно увлечен биологией... в гастрономическом аспекте; химию знает исключительно на примере процессов пищеварения. Арамис - крупный специалист по тонкому анализу ароматических соединений
54479. Music… Music… Music… 37 KB
  Rock’n’roll is a style of music that was popular in 1950s but is still played now, which has a strong loud beat, repeats a few simple phrases and is usually played on electrical instruments. It was first made popular by Bill Halley and Elvis Presley.
54480. Урок музыки. Группы. Композиторы 64.5 KB
  Today at the lesson we’ll listen and repeat the names of the musical instruments, after that we’ll give names of the musical instruments of four groups, we’ll listen to music and name name the styles of popular music you listen to. We’ll speak about structure of the music lesson.
54481. Music in our life 91 KB
  Objectives: to revise and enrich students’ vocabulary on the topic; to improve students’ reading, speaking, writing skills; to practice students’ listening skills; to train students’ habits in group work; to cultivate students’ aesthetic tastes, awareness and respect to the world culture; to enhance students’ cognitive abilities and memory.
54482. Музика 55 KB
  Мета: ознайомити учнів з лексичними одиницями і навчити оперувати ними у мовленні; вчити учнів взаємодіяти в заданій ситуації за змістом прочитаного тексту, повторити граматичний матеріал та тренувати учнів оперувати граматичними структурами у мовленні; розвивати логічне мислення і мовленнєву реакцію, розвивати навики читання; виховувати культуру спілкування, інтерес до культури країни, мова якої вивчається.
54483. WORLD MUSIC 53 KB
  Nowadays many people enjoy music as their hobby. Thanks to this fact you can make many new friends, you can exchange cd’s, records, listen to music together and visit different concerts. For my person, music plays more important role in life than good pastime. It is something, which helps me to be in a good mood, understand different things and remove from tension. Music brings me pleasure and keen delight and fills my life with great expectations of joy and happiness.
54484. Музика охоплює весь світ 45 KB
  Мета: активізувати та розширити знання учнів про економіку країн, які є Батьківщиною видатних композиторів світу, узагальнити знання учнів про композиторів – класиків кінця 17 – початку 20 століття, розвивати навички самостійної роботи з інформаційним матеріалом, навички зв’язного мовлення, вчити співвідносити знання з різних галузей науки та мистецтва, виховувати культуру поведінки, формувати потребу сприймати та виконувати високохудожні музичні твори, виховувати інтерес до знань, залучати учнів до проведення нестандартних типів уроку.