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


 

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

2693. Психолого-педагогічна характеристика 10-А класу 46 KB
  Школа має всі необхідні умови для проходження педагогічної практики. Існують добре обладнані кабінети географії та біології, бібліотека укомплектована підручниками і додатковою літературою. Є комп’ютерний клас з демонстраційною дошкою що дає мо...
2694. Виховний iдеал національної системи виховання 101 KB
  Поняття національне виховання. Його сутність та особливості. Національне виховання як невід'ємний чинник цілісного формування особистості. Основні напрямки розвитку національного виховання. Збереження традицій національного виховання у сучасному світі.
2695. Through Centuries with Love/ Через віки з любов’ю 603 KB
  Тема заходу: Through Centuries with Love Через віки з любов’ю Мета заходу: Методична: вдосконалити методику проведення позааудиторного заходу  з використанням індивідуальних і групових форм роботи з метою удо...
2696. Рыцарский турнир 45 KB
  Внеклассное мероприятие Рыцарский турнир Добрый день, дорогие друзья! Мы собрались сегодня с вами на праздник, который назвали Рыцарский турнир. А вы знаете, кто такие рыцари? В средние века рыцарями называли отважных, смелых воинов, котор...
2697. Человеческие чувства. О любви немало слов уж сказано 71 KB
  формирование и развитие у учащихся осознания существующих незыблемых общечеловеческих ценностей, идентичности восприятия их разными народами, необходимости бережного отношения не только к человеческим чувствам, но и к тому хрупкому миру, в котором им...
2698. 8 марта. Воспитательное мероприятие 48 KB
  Цели мероприятия: Образовательная - расширение и углубление знаний и умений учащихся. Развивающая - развивать чувство уважения друг к другу. Воспитательная - формирование у учащихся морально-нравственных качеств. Оборудование: бумага, фломастеры, цв...
2699. Золотой век российской науки и другие воспитательные мероприятия по физике 434 KB
  Устный журнал, посвященный истокам русской науки. Журнал включает в себя 3 блока: информационный, дискуссионный, игровой. Ведущими информационного блока выступают дети, исполняющие роли журналистов. Дискуссионный блок проводит классный руковод...
2700. Путешествие по англоязычным странам 4.56 MB
  Путешествие по англоязычным странам Цели:  обучающая: развивать познавательный интерес учащихся, развитие и поддержание интереса к странам изучаемых языков, воспитательная: воспитание толерантности и уважения к другой культуре, чуткости и...
2701. Актуальные вопросы ВИЧ-инфекции 109.38 KB
  Актуальные вопросы ВИЧ-инфекции Цель: Сформировать убеждение в необходимости избегать форм поведения, связанных с неоправданным риском для здоровья и жизни. Оборудование: Карты с изображением компании подростков (одна на парту). Текст История...