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


 

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

73169. ЛЕБІДКА 3.57 MB
  Навчальні завдання: вивчення конструкції лебідки; визначення основних робочих параметрів - канатоємності барабана, швидкості навивання каната на барабан, зусилля в канаті; вимірювання зусилля в канаті під час пуску двигуна (за допомогою тензоапаратури, аналого-цифрового перетворювача...
73170. ВИВЧЕННЯ ТАЛІВ 2.13 MB
  Визначення зусиль у тяговому ланцюгу ручного таля і ККД механізму під час підіймання вантажу; визначення коефіцієнта опору пересуванню електроталя; визначення сили зчеплення привідних коліс електроталя з монорейкою і розрахунок максимально припустимого прискорення під час розгону таля...
73171. СТІЙКІСТЬ СТРІЛОВОГО КРАНА 610 KB
  Самохідний стріловий кран на пневмоколісному ході (рис.7.1) із баштово-стріловим обладнанням. Ходова частина 1 містить чотири привідних колеса з індивідуальними механізмами пересування. У кутах неповоротної рами розташовані виносні опори 2, які збільшують опорну базу крана...
73172. СТРІЧКОВИЙ КОНВЕЄР 372 KB
  Модель містить жолобчасті трьохроликові роликоопори 1 завантаженої верхньої гілки та однороликові плоскі роликоопори 2 порожньої гілки, які служать для підтримування стрічки 3. Жолобчасті роликоопори порівняно з плоскими забезпечують подвоєння продуктивності з тими...
73173. Настройка параметров аутентификации Windows 8,1 902.04 KB
  Определяет число новых паролей которые должны быть сопоставлены учетной записи пользователя прежде чем можно будет снова использовать старый пароль. Определяет период времени в днях в течение которого можно использовать пароль прежде чем система потребует от пользователя заменить его.
73174. Электронная почта 21.65 KB
  Цель работы: изучить основные функции работы с программами-почтовыми клиентами на примере приложения Outlook Express. Порядок выполнения работы Вызвать программу Outlook Express; Произвести настройку учетной записи (Сервис Учетные записи электронной почты).
73175. Вычисления в MS Excel 88.82 KB
  На Листе1 составьте таблицы (с пояснительными надписями!) для решения следующих задач: По известным длинам катетов прямоугольного треугольника вычислить длину гипотенузы и площадь треугольника. Дано уравнение: Вычислить значения у для с шагом 2.