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


 

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

46650. Дополнительное профессиональное образование 24.45 KB
  Представляет собой систему средств обеспечивающих прогностическую оценку взаимосоответствия человека и профессии в тех видах деятельности которые осуществляются в нормативно заданных опасных условиях гигиенических микроклиматических технических социальнопсихологических требующих от человека повышенной ответственности здоровья высокой работоспособности и точности исполнения задания устойчивой эмоциональноволевой регуляции. Вот почему на каждом уроке как правило учителя дают учащимся домашние задания. Обычно эти задания включают в...
46651. Статус української мови як державної 24.5 KB
  Українська мова в Україні має статус державної. Це закріплено у десятій статті Конституції України. Державна мова - мова, яка користується у конкретній державі законодавчим статусом обов'язкової для вживання в офіційних сферах життя. Державна мова обслуговує державні і суспільні органи, організації, заклади культури і освіти. Вона повинна побутувати у всіх сферах життя
46653. Declarative sentences 24.5 KB
  A declarative sentence contains a statement which gives the reader or the listener some information about various events, activities or attitudes, thoughts and feelings. Statements form the bulk of monological speech, and the greater part of conversation. A statement may be positive (affirmative) or negative, as in...
46654. Рак легкого. Классификация. Стадии процесса. Пути метастазирования. Современные принципы лечения 24.66 KB
  Различают две формы: центральный рак легкого исходящий из крупного или мелкого бронха и периферический рак развивающийся из самой ткани легкого. Различают центральный рак легкого растущий преимущественно внутри или перибронхиапьно 80 случаев; периферический рак; редко диагностируется медиастинальная форма милиарный узелковый карциноз и др. По гистологической структуре раки легкого чаще всего бывают плоскоклеточными хотя наблюдаются также железистые формы аденокарциномы резко анаплазированные мелкоклеточный рак...
46655. Становление и развитие экологического права. Проблемы дифференциации и интеграции в развитии экологического права 24.72 KB
  Лишь в 70е годы применительно к водам и в 80е применительно к атмосферному воздуху проблемы охраны окружающей среды от загрязнения стали оцениваться и регулироваться как экологические. В то время не законы а именно правительственные постановления определяли некоторые комплексные подходы к регулированию природопользования и охраны окружающей среды как единого объекта. В конце 80х годов ЦК КПСС и Правительство СССР осознавали что основными причинами резкого ухудшения состояния окружающей среды в стране являлись: слабое правовое...
46656. Договор международного факторинга 24.74 KB
  Договор международного факторинга это специфический по своему характеру вид факторинга. Преимущества субъектов международного факторинга Поставщик отгрузивший продукцию получает оплату за товар не дожидаясь оплаты покупателем что увеличивает объемы продаж и конкурентоспособность. Содержание договора международного факторинга ПРЕДМЕТ ДОГОВОРА Согласно ст.
46657. Международный кодекс рекламной практики 24.91 KB
  Реклама должна расцениваться прежде всего с точки зрения ее воздействия на покупателя причем следует обращать внимание каким видом СМИ она будет распространяться. Определения Для целей настоящего Кодекса: термин реклама должен употребляться в самом широком смысле включающем любую форму рекламы относительно изделий услуг и благ независимо от вида СМИ которое используется в том числе рекламные надписи и изображения на упаковках этикетках. А также любые надписи и изображения на самом товаре; термин товар включает изделия...
46658. Макроэкономическая нестабильность: инфляция 28.87 KB
  Главным показателем инфляции явлся темп инфляции процентное отношение разницы уровня цен текущего и базисного периода. П темп инфляции П = Р1Р0 Р0 100 По уровню темпа инфляции выделяют виды инфляции: Умеренная ползучая темп инфляции составляет до 10 в год; галопирующая выражается 2ух значными числами и считается серьезной экон проблемой; гиперинфляция измеряется в месяц и может составлять более 100 в год....