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


 

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

82515. Критерии классификации правовых систем (семей) 25.42 KB
  Например в раннегосударственную эпоху критерий был более чем простым правовые системы делились на свои правильные и чужие неправильные. Так по этому критерию можно разграничить христианские мусульманские и языческие правовые системы. компаративистский Компаративистский подход основан на том что правовые системы отдельных государств можно объединить в правовые семьи на основе сходства по следующим критериям: 1. Сходство структуры системы права и системы законодательства системы применения права.
82516. Соотношение сравнительного правоведения с международным публичным и международным частным правом 25.76 KB
  Взаимодействие сравнительного правоведения и МЧП как особых научных дисциплин – широкое понимание Все методы решения коллизии законов предусматривают применение в ряде случаев иностранного закона. Сравнительное правоведение предоставляет в распоряжение МЧП инструментарий позволяющий правильно построить соответствующие институты...
82517. Понятие, формирование и распространение романо-германской правовой семьи 27.53 KB
  К романогерманской правовой семье относятся правовые системы возникшие в континентальной Европе на основе римских канонических и местных правовых традиций. Романогерманская правовая семья – это правовые системы созданные с использованием римского правового наследия и объединенные общностью структуры источников права и сходством понятийноюридического аппарата Формирование. Романогерманская правовая семья имеет весьма длинную юридическую историю.
82518. Структура романо-германской правовой семьи 26.68 KB
  Основным источником является нормативный правовой акт. Правоприменительные органы также построены по иерархическому принципу. Правовое регулирование строится на принципе строго разделения публично и частноправовой сфер в зависимости от принадлежности правоотношения к той или иной сфере определяются права и обязанности субъектов права.
82519. Источники романо-германского права 26.8 KB
  Среди нормативно-правовых актов главное место занимает закон. Среди законов наибольшей юридической силой обладают конституции. Затем следуют органические (конституционные) законы, которые, однако, существуют не во всех странах этой семьи.
82520. Задания, направленные на развитие логического мышления младших школьников с ЗПР 61.5 KB
  Примеры такого анализа: Данное упражнение можно использовать на уроках математики. Данное упражнение рекомендуется использовать на уроках математики ознакомления с окружающим миром а также труда 2. Упражнение можно использовать на уроках математики. Это задание рекомендуется использовать на уроках математики ознакомления с окружающим миром и труда.
82521. Развитие мышления у детей с ЗПР младшего школьного возраста 35.5 KB
  Особый интерес представляет метод обучения детей модельному конструированию разработанный А. Важным при таком способе обучения конструированию является то что мыслительные процессы детей приобретают опосредованный характер нежели при конструировании по образцу. Для этого необходим достаточно высокий уровень абстрагирования что дает возможность формированию у детей специфических способов соотнесения определенных свойств условий с соответствующими свойствами постройки.
82522. Развитие мышления у младших школьников с ОНР 4.26 MB
  Отгадывание ребусов: отгадать слово из двух предлогов: найти в слове квас три предлога: Цель: развитие словеснологического мышления Установление простых аналогий навыков словообразования. Цель: развитие словеснологического мышления устойчивости и концентрации слухового внимания. Задание: определить что пропущено в рассказе: названия предметов предлоги или названия признаков Цель: развитие нагляднообразного мышления.
82523. Методы и приемы развития словесно-логического мышления учащихся с речевой патологией на уроках 83.5 KB
  Инструкция: Я буду говорить слово по звукам слогам а ты запиши его в тетради. а сани солома зэркало дворэц б первый слогпу третий слог вик второй слог хо; первый слог пу третий слог ка второй слогшин второй слог шок первый слог пу третий слог ка второй слог пуш первый слого Дополнительное задание: подчеркнуть лишнее слово. первый слог са второй слог мо третий слог кат третий слог ле второй слог то первый слог вер первый слог са третий слог ник...