69711

Конструктори

Лекция

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

Конструктор призначений для ініціалізації об’єкту і викликається автоматично при його створенні. Основні властивості конструкторів. Конструктор не повертає значення, навіть типу void. Не можна отримати покажчик на конструктор.

Украинкский

2014-10-09

34 KB

1 чел.

Тема 1: Конструктори

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

  1.  Конструктор не повертає значення, навіть типу void. Не можна отримати покажчик на конструктор.
  2.  Клас може мати декілька конструкторів з різними параметрами для різних видів ініціалізації (при цьому використовується механізм перевантаження).
  3.  Конструктор, який викликається без параметрів, називається конструктором за замовчуванням.
  4.  Параметри конструктора можуть мати будь-який тип, окрім цього ж класу. Можна задавати значення параметрів за замовчуванням. Їх може містити тільки один з конструкторів.
  5.  Якщо програміст не вказав жодного конструктора, компілятор створює його автоматично. У разі, коли клас містить константи або посилання, при спробі створення  об'єкту класу буде видана помилка, оскільки їх необхідно ініціалізувати конкретними значеннями, а конструктор за замовчуванням цього робити не вміє.         Конструктори не успадковуються.
  6.  Конструктори не можна описувати з модифікаторами const, virtual і static.
  7.  Конструктори глобальних об'єктів викликаються до виклику функції main. Локальні об'єкти створюються, як тільки стає активною область їх дії.

 Конструктор викликається, якщо в програмі зустрілася яка-небудь з синтаксичних конструкцій:

ім'я_класу ім'я_об'єкту [(список параметрів)];

// Список параметрів не повинен бути порожнім

ім’я_класу (список параметрів);

// Створюється об'єкт без імені (список може бути порожнім)

ім’я_класу  ім’я_об’єкту = вираз;

// Створюється об'єкт без імені і копіюється

Приклади.

monstr Super(200, 300), Vasia(50), Z;

monstr X = monstr(1000);

monstr У = 500;

Як приклад класу з декількома конструкторами удосконалимо описаний раніше клас monstr, додавши в нього поля, задаючі колір

(skin) і ім'я (name):

enum color (red, green, blue);   // Можливі значення кольору class monstr

{

int health, ammo;

color skin;

char *name;

public;

monstr(int he = 100, int am   = 10);

monstr(color sk);

monstr(char * nam);

int get_health() {return health;}

int get_ammo() {return ammo;}

};

//..............................

monstr::monstr(int he, int am)

{

health = he; ammo = am; skin = red; name = 0;

}

//..........................

monstr::monstr(color sk)

{

switch (sk)

{

case red : health = 100; ammo = 10; skin = red;  name = 0;

break;

case green: health = 100; ammo = 20; skin = green; name = 0; break;

case blue : health = 100; ammo = 40; skin = blue;  name = 0; break;

}

}

//------------------------------------------

monstr::monstr(char * nam)

{

name = new char [strlen(nam)+ 1];

// До довжини рядка додається 1 для зберігання нуль-символа

strcpy(name, nam);

health = 100; ammo =10; skin = red;

}

//................................

monstr *m = new monstr ("Ork");

monstr Green (green);

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

Деструктор

Деструктор — це особливий вид методу, який застосовується для звільнення памяти, займаної об'єктом. Деструктор викликається

автоматично, коли об'єкт виходить з області бачення:

1.  для локальних об'єктів — при виході з блоку, в якому вони оголошені;

2.  для глобальних — як частина процедури виходу з main:

3.  для об'єктів, заданих через покажчики, деструктор викликається неявно при використанні операції delete.

Ім'я деструктора починається з тільди (~), безпосередньо за якою слідує ім'я класу. Деструктор:

1.  не має аргументів і значення, яке повертається;  не може бути оголошений як const або static;

2.  не успадковується;

3.  може бути віртуальним .

Якщо деструктор явним чином не визначено, компілятор автоматично створює порожній деструктор. Описувати в класі деструктор явним чином потрібно у разі, коли об'єкт містить покажчики на пам'ять, яка виділяється динамічно — інакше при знищенні об'єкту пам'ять, на яку посилалися його поля-покажчики, не буде помічена як вільна. Покажчик на деструктор визначити не можна.

Деструктор для даного прикладу повинен виглядати так:

monstr::~monstr( )

{delete [] name;}

Деструктор можна викликати явним чином шляхом вказання повністю уточненого імені, наприклад:

monstr *m; ... m -> -monstr();

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


 

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

44070. Экспериментальное исследование педагогического общения 4.68 MB
  Это осознанная и неосознанная вербальная связь передача и приеминформации что наблюдается повсюду и всегда. Именно им определены основные коммуникативные как бы назвали это сейчас задачи говорящего: что сказать где сказать и как сказать. На основании соблюдения оратором трех задач что где как сказать Цицерон определял и тип оратора лучшим воплощением которого был тот чья речь будет уместной. Достаточно сказать что только в США этой проблемой занимаются несколько десятков тысяч научных...
44071. Технологическое проектирование производственных подразделений современных автотранспортных предприятий (АТП) 383 KB
  Характеристика объекта проектирования Характеристика подвижного состава Наименование характеристик Марка а м Марка а м Грузоподъемность кг Снаряженная масса кг Габаритные размеры мм Двигатель Мощность кВт л.13 Марка автомобиля Урал 63685 Зил130 Списочное количество 16...
44072. Професійна підготовка спеціаліста верстки і дизайну 281 KB
  Головним завданням учня при роботі над дипломною роботою є: мобілізація своїх професійних знань та навичок з питань обробки текстової та графічної інформації для вирішення технічної задачі набору та верстки матеріалу у відповідних програмах при цьому витримати технологічну послідовність виконання операцій набору та верстки; підібрати техніку та технології що відповідають сучасним вимогам поліграфічних підприємств; здійснити економічні розрахунки;визначати матеріальні затрати;чітко дотримуватися правил з охорони праці. Необхідна...
44073. Цвет в трудовой и учебной деятельности. Психологическая характеристика цветов 222.5 KB
  При дневном освещении самым светлым человеку кажется желтый цвет. При переходе от дневного зрения к ночному чувствительность сдвигается к синему цвету. При сумеречном освещении лучше всего глаз человека различает зеленые оттенки.
44075. Конструированию МВИ в составе индикатора вертолётного 3.15 MB
  Описание структурной схемы индикатора Компоновка индикатора Исходя из условий эксплуатации индикатора вертолетного выбор конструктива модуля сделан в пользу Евромеханика типоразмера В рамках данного дипломного проекта согласно техническому заданию ТЗ производится конструирование МВИ в структуре индикатора вертолётного.
44076. Разработка электронной обучающей системы для эффективного изучения специальности «программное обеспечение» 304 KB
  Разработка электронной обучающей системы для более эффективного изучения студентами специальности «программное обеспечение» способов работы с требованиями к программному обеспечению, их анализа, структурирования, моделирования и специфицирования. Обучающая система решала бы некоторые проблемы при изучении правил и подробностей работы с требованиями к программному обеспечению.
44077. Использование функции рассеяния в энергетических расчетах измерительных радиосистем 817.5 KB
  В данной работе был рассмотрен метод радио-акустического зондирования и его основные энергетические соотношения, так же произведен анализ расчётных энергетических соотношений для систем радиолокации и систем связи. Были рассмотрены модификации энергетических соотношений, для использования сигналов с разными формами огибающих.