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


 

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

31099. Методы и модели разработки УР 68.97 KB
  Обобщенная классификация методов принятия управленческих решений В теории принятия управленческих решений используются разнообразные методы среди которых выделяют аналитические статистические математического программирования эвристические экспертные ситуационные и ряд других. В процессе принятия управленческих решений лицо принимающее решение может применять различные методы которые прямо или косвенно способствуют принятию оптимальных по различным критериям решений. Все методы принятия решений можно разделить на две группы:...
31100. Понятие и сущность управленческого решения Сущность, назначение и содержание управленческого решения 57.25 KB
  Решения принимаются человеком в разных сферах деятельности технической биологической социальной экономической политической и являются основным продуктом деятельности организуемых в этих сферах систем управления. Для сферы социальной общественной экономической и политической деятельности людей где в качестве основного объекта управления выступает личность человека с его высокой степенью непредсказуемости в поступках реакциях разработана совокупность социальнопсихологических методов управления которые совместно с...
31101. Денежно-кредитная система 189.34 KB
  Изменение количества денег в обращении способно существенным образом повлиять на уровень доходов цен на выпуск продукции. Происхождение денег. Золото в роли денег В экономической теории существуют две точки зрения на происхождение денег: рационалистическая и эволюционная. История происхождения денег подтверждает эту теорию.
31102. Экономическая теория и экономическая практика 74.5 KB
  Глава школы Франсуа Кенэ 16941774 заложил основы теории воспроизводства общественного капитала создав первую макроэкономическую модель в виде экономических таблиц. После экономических кризисов 2030х гг. Своим разнообразием точек зрения на проблемы общества экономика позволяет выявить исторические особенности экономических систем и понять закономерности развития мировой цивилизации. Микроэкономика связана с исследованием деятельности отдельных экономических субъектов.
31103. Собственность, выбор, конкуренция 97.5 KB
  Собственность и хозяйствование Собственность – это общественная форма присвоения факторов и результатов производства. Основополагающую роль играют отношения собственности на факторы производства. Экономическое содержание собственности на факторы производства – это способ их соединения который может быть прямым или опосредованным отношениями найма. Особая важность экономической категории собственности определяется тем что: собственность является основой всей системы экономических отношений; от отношений собственности зависит положение...
31104. Товар и деньги 32 KB
  Сущность денег Существует две теории возникновения денег: рационалистическая и эволюционная. Классическая теория денег рассматривает деньги как законченную форму всеобщего эквивалента в качестве которого выступают драгоценные металлы: золото и серебро. В соответствии с классической теорией денег они выполняют функции меры стоимости средства обращения средства накопления средства платежа мировых денег. Современная денежная система характеризуется господством бумажнокредитных денег.
31105. Затраты и результаты 63.5 KB
  В экономической теории и практике различают понятия затраты и издержки производства. Поэтому издержки производства зависят и от уровня затрат во многом обусловленных используемой технологией и от цен на ресурсы. В краткосрочном периоде часть издержек фирмы остается постоянной в долговременном периоде все издержки являются переменными зависящими от объема выпуска. Средние величины: средние общие АТС средние постоянные АFС и средние переменные VC издержки используются в принятии решений в текущем и будущих периодах.
31106. Рынок. Сущность рынка и его функции 100 KB
  Рыночная экономика – это такая экономическая система, в которой решения принимаются самостоятельными экономическими субъектами децентрализовано на основе свободы выбора. Рынок – это форма взаимоотношений между экономическими субъектами: продавцами и покупателями
31107. Спрос как экономическая категория. Факторы, оказывающие влияние на изменение спроса 80 KB
  Факторы оказывающие влияние на изменение спроса Механизм рынка делает производителей – участников конкурентного процесса заинтересованными в удовлетворении потребностей но только тех которые выражаются через спрос. Индивидуальный – спрос отдельного покупателя характеризуется ценой спроса и величиной объемом спроса. Цена спроса – это максимальная цена по которой покупатель еще способен приобрести данный товар. Объем спроса это максимальное количество конкретного товара которое покупатель готов приобрести в рассматриваемом периоде...