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


 

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

12348. Қоғам әлеуметтік жүйе ретінде. Қазіргі Қазақстан қоғамының әлеуметтік құрылымы 59 KB
  3дәріс. Қоғам әлеуметтік жүйе ретінде. 2 сағат. Қоғамның әлеуметтік жүйе ретіндегі мәні. Әлеуметтік жүйе оның элементтері. Қоғамның әлеуметтік құрылымы. Қазіргі Қазақстан қоғамының әлеуметтік құрылымы. Адамзаттың қауымдастығы ретінде қоғ
12349. Әлеуметтану ғылымының классикалық кезеңі 54 KB
  2сабақ. Әлеуметтану ғылымының классикалық кезеңі. 1. Огюст Конт әлеуметтану ғылымының негізін салушы. 2. Герберт Спенсердің әлеуметтану ғылымына қосқан үлесі. 3. К.Маркстің негізгі әлеуметтанулық ілімдері. 4. Э.Дюркгейм мен М.Вебердің әлеуметтанулық т...
12350. Әлеуметтану – ғылыми пән. Әлеуметтанудың құрылымы мен функциялары 64.5 KB
  1 дәріс. Әлеуметтану ғылыми пән 1. Қоғам және әлеумет ұғымдарының мәні. 2. Әлеуметтанудың объектісі мен пәні. 3. Әлеуметтанудың категориялары мен заңдары. 4. Әлеуметтанудың құрылымы мен функциялары.
12351. Әлеуметтану ғылыми пән ретінде. Әлеуметтанудың құрылымы мен функциялары 58 KB
  Әлеуметтану ғылыми пән ретінде 1. Қоғам және әлеумет ұғымдарының мәні. 2. Әлеуметтанудың объектісі мен пәні. 3. Әлеуметтанудың категориялары мен заңдары. 4. Әлеуметтанудың құрылымы мен функциялары. 5. Әле
12352. Исследование затухающих колебаний в колебательном контуре 458 KB
  Лабораторная работа № 25 Исследование затухающих колебаний в колебательном контуре 1. Цель работы: Изучение параметров и характеристик реального колебательного контура. 2. Затухающие колебания. Если диссипативную систему находящуюся в колебательном движении пр...
12353. Изучение электрических колебаний в связанных контурах 252 KB
  Лабораторная работа № 24 Изучение электрических колебаний в связанных контурах 1. Цель работы: Изучение обмена энергии в системе электрических контуров слабо связанных между собой. 2. Колебательные системы со слабой связью. Рассмотрим систему двух одинаковых мая
12354. Изучение свойств p-n перехода 283 KB
  Лабораторная работа № 23 Изучение свойств pn перехода 1. Цель работы: изучение вольтамперных характеристик при прямом и обратном направлении протекающего через переход тока и вольтфарадной зависимость емкости перехода от приложенного напряжения характеристики pn...
12355. Изучение вынужденных колебаний в колебательном контуре 343.5 KB
  Лабораторная работа № 22 Изучение вынужденных колебаний в колебательном контуре 1. Цель работы: изучение зависимости тока в колебательном контуре от частоты источника включенного в контур измерение резонансной частоты контура. 2. Вынужденные колебания в RLCконтур
12356. Скин-эффект в металле 182.5 KB
  Лабораторная работа № 21 Скинэффект в металле 1. Цель работы: Изучение скинэффекта в металле. 2. Электромагнитная индукция. Вихревое электрическое поле. Явление электромагнитной индукции состоит в том что в проводящем контуре находящемся в переменном магнитном