Конструктори і деструктори класів.

Перевантаження методів.

Вказівник this.

Специфікатори доступу (private, protected, public).

 

 

 

Покажчик this

Ключове слово this виступає в ролі неявно заданого покажчика на поточний об'єкт:

ім'я_класу *this;

Покажчик this доступен тільки у функціях-членах класів (а також структур) і дозволяє послатися на об'єкт, для якого викликана функція. Найчастіше він знаходить застосування в конструкторах, що виконують резервування пам'яті :

class имя класса {

public:

ім'я_класу(int size) ( this = new(size); }

~ім'я класу (void); };

 

Як вже відзначалося, найважливішим нововведенням, що характеризує ОО методологію програмування, є включення у визначення об' єкта операцій, що може виконувати цей об' єкт.

Під методами в ТОП розуміють алгоритми, спрямовані на виконання об' єктом операцій (дій) як за запитому іншого об' єкта, так і для "Задоволення своїх власних потреб" в опрацюванні інформації.

Таким чином, методи об' єктів в ТОП слугують тим же цілям, що і процедури (функції) в структурному програмуванні. Однак, на відміну від структурного програмування, у якому для розв¢язання підзадачи основна програма (чи процедура) викликає відповідну процедуру, передаючи їй необхідні дані і приймаючи результати опрацювання у вигляді параметрів, ОО підхід припускає, що кожен об' єкт, реагуючи на повідомлення - запитий від іншого об' єкта, вирішує поставлену завдання, виконуючи необхідну операцію власним методом. Таким чином, для будь- якої дії (операції), що виконується над атрибутами об' єкта, повинний бути написань окремий метод.

 

Конструктор є особливого роду функцию-член класу, призначену в першу чергу для ініціалізації змінних класу і резервування пам'яті. Ім'я конструктора співпадає з ім'ям класу, якому він належить. Конструктори можуть приймати аргументи і бути переобтяженими. При створенні об'єкту класу потрібний конструктор викликається автоматично. Якщо при описі класу конструктор не був заданий, то компілятор згенерує для класу стандартний конструктор.

Деструкцією називається ще одна спеціальна функція-член класу, яка служить в основному для звільнення динамічної пам'яті, займаної об'єктом, що видаляється. Деструкція, як і конструктор, носить ім'я класу, яке як префікс містить знак тильди (~). Деструкція викликається автоматично, коли в програмі зустрічається оператор delete з покажчиком на об'єкт класу або коли об'єкт виходить за межі своєї зони видимості. На відміну від конструкторів, деструкції не приймають ніяких аргументів і не можуть бути переобтяжені. Якщо деструкція не задана явно, компілятор надасть класу стандартну деструкцію.

У наступній програмі продемонстровано створення простого конструктора і деструкції. В даному випадку вони лише сигналізують відповідно про створення і видалення об'єкту класу coins. Зверніть увагу на те, що обидві функції викликаються автоматично : конструктор - в рядку

coins cash_in_cents;

а деструкція - після завершення функції main().

//

// // coins.cpp

// // У цій програмі на мові C++ демонструється створення конструктора

// // і деструкції. Ця програма обчислює, яким набором монет

// // гідністю 25,10,5 і 1 копійка можна представити задану грошову

// // суму.

//

##include <iostream.h> const int QUARTER = 25; const int DIME = 10; const int NICKEL = 5;

class coins { int number;

public: coins ()

{ cout << "Початок обчислень.\n";} // конструктор

~coins ()

{ cout << "\nКонец обчислень".; } // деструкція void get_cents(int); int quarter_conversion(void); int dime_conversion(int); int nickel conversion(int);

};

void coins::get_cents(int cents){

number = cents; cout << number << " копійок складається з таких монет :" << endl; )

int coins::quarter_conversion()

{

cout << number / QUARTER << " - гідністю 25, return (number % QUARTER);

}

int coins::dime_conversion(int d){ cout<< d/ DIME<< " - гідністю 10, return(d % DIME);

}

int coins::nickel_conversion(int n){ cout<< n/ NICKEL<< " - гідністю 5 і return(n % NICKEL); }

main ()

int з, d, n, p;

cout<< "Задайте грошову суму в копійках: "; cin>> з;

// // створення об'єкту cash_in_cents класу coins coins cash_in_cents;

cash_in_cents.get_cents(с); d = cash_in_cents.quarter_conversion(); n

= cash_in_cents .dime_conversion (d); p =

cash_in_cents.nickel_conversion(n); cout << p << " - гідністю 1".;

return(0); }

От як виглядатимуть результати роботи програми :

Задайте грошову суму в копійках: 159

Початок обчислень.

159 копійок складається з таких монет:

6 - гідністю 25, 0 - гідністю 10,

1 - гідністю 5 і 4 - гідністю 1.

Кінець обчислень. У функції get_cents{) задана користувачем грошова сума записується в змінну number класу coins. Функція quarter_conversion() ділить значення numberна 25 (константа QUARTER), обчислюючи тим самим, скільки монет гідністю 25 копійок "уміщається" в заданій сумі. У програму повертається залишок від ділення

який далі, у функції dime_conversion(), ділиться вже на 10 (константа dime). Знову повертається залишок, цього разу він передається у функцію nickel_conversion(), де ділиться на 5 (константа NICKEL). Останній залишок визначає кількість одинкопійчаних монет.