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 виділялася конкретна адреса пам'яті. Без необхідності явно викликати деструктор об'єкту не рекомендується.


 

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

75416. Оптичні давачі. Давачі дифузного типу 2.47 MB
  Давачі дифузного типу Давач дифузного типу створений за принципом давача з відбиттям від рефлектора. Давачі дифузного типу Давач дифузного типу з придушенням заднього фону Давачі дифузного типу з придушенням заднього фону були розроблені для того щоб досягти визначеного діапазону сканування для будьяких обєктів незалежно від їх яскравості кольору та інших властивостей а також від яскравості заднього фону. Такі давачі ігнорують всі обєкти які знаходяться до давача ближче ніж попередньо налаштований діапазон виявлення.
75417. Безконтактний магніточутливий давач 262 KB
  Давач що виявляє зміну напруженості постійного магнітного поля має напівпровідниковий комутуючий елемент і що не містить рухомих частин в чутливому елементі рис. Спрацювання давача відбувається при зміні напруженості магнітного поля викликаного наприклад переміщенням постійного магніту розташованого на рухомої частини механізму. Крім того магніточутливих давачи можуть відрізнятися по реакції на зміну магнітного поля: При збільшенні напруженості зовнішнього магнітного поля наприклад при наближенні постійного магніту...
75418. Блоки живлення, лічильники імпульсів, реле часу, сигналізатори рівня, розєми і зєднувачі, вибухобезпечне устаткування 753.5 KB
  Блок живлення — це вторинне джерело живлення, призначене для забезпечення живлення електроприладу електричною енергією, при відповідності вимогам її параметрів: напруги, струму, і т. д. шляхом перетворення енергії інших джерел живлення.
75419. Сенсори. Аналогові сенсори. Сенсори положення, кута, віддалі та товщини 575 KB
  Сенсори положення кута віддалі та товщини. Аналогові сенсори За допомогою аналогових сенсорів перетворюють механічні величини наприклад зміну положення або електричні величини наприклад зміну потужності на електричні сигнали напруги або струму. Сигнали з вимірювального перетворювача можуть бути представлені у фізичних величинах наприклад у випадку перетворювача положення в мм. Сенсори положення кута віддалі та товщини Потенціометричні контактні сенсори При пересуванні ковзного контакту в поступальному потенціометрі або повороту...
75420. Індуктивні безконтактні кінцеві сигналізатори 568 KB
  Котушка з відкритим, чашковим феромагнітним осердям створює високочастотне електромагнітне поле. Котушка є індуктивною частиною коливного контуру, який збуджується за допомогою частотного генератора з частотою близько
75421. Сенсори розтягу, сили, обертового моменту i тиску 585 KB
  Види виконання вимірювальних сіток фольгових тензометрів Для одночасного вимірювання в кількох напрямках служать спеціальні тензометри в яких вимірювальні сітки розміщені одна відносно іншої під кутом 120 або під кутом 45 до напрямку видовження рис.
75422. Сенсори прискорення. Сенсори температури 164 KB
  Сенсори температури. Сенсори температури Найважливішим різновидом давачів є давачі температури оскільки багато процесів у тому числі і в повсякденному житті регулюються температурою наприклад: регулювання опалення на підставі вимірювання температури теплоносія на вході і виході а також температури в приміщенні і зовнішньої температури; регулювання температури води в пральній машині; регулювання температури електропраски електроплитки духовки...
75423. Бінарні сенсори. Цифрові сенсори 480 KB
  Бінарні сенсори влаштовані як реле (перемикачі) або як аналогові сенсори з перемикачем порогового значення. Коли вхідна величина сенсора досягає порогу перемикання, бінарний вихідний сигнал змінює значення. Під час зміни вхідної величини у зворотному напрямі, по досягненню порогового значення...
75424. Інкрементальні сенсори положення. Кодові лінійки і диски абсолютних сенсорів 631 KB
  Інкременгальні сенсори переміщення оснащені лінійкою з рисковими поділками. Читання положення рисок здійснюється оптичними або магнітними методами. В сенсорах через які проходить світло використовуються скляні лінійки з рисками які поглинають світло і проміжками які пропускають світло шириною 4 мкм рис. Пристрої які зчитують це складаються з потужного джерела світла зчитувальної пластинки і електронної системи аналізу.