бліотеки. p> Для ілюстрації розглянемо приклад класу, який задає координату на екрані:
class Location
{int x;
int y;
public:
Location (int _x, int _y);// конструктор
void setx (int nx);
void sety (int ny);
int Getx ()
{return x;}
int Gety ()
{return y;}
};
У даному прикладі, використавши специфікатор public, ми зробили відкритими для інших функцій методи, описані в класі.
Визначити функції - члени класу можна всередині опису класу або за його межами. У першому випадку функція вважається вбудованої. Вбудована функція характерна тим, що компілятор C + +, обробляючи виклики цієї функції в програмі, замінює їх не на виклик функції як підпрограми, а безпосередньо на об'єктний код, що відповідає визначенню цієї функції. Внаслідок сказаного, програміст повинен брати до уваги, що вбудовуються функції, як правило, мають короткі визначення. В якості приклад можна навести визначення функцій Getx () і Gety ().
Для визначення функції - члена класу за межами опису класу необхідно визначити її де-небудь у програмі після визначення класу, членом якого вона є.
void Location :: setx (int nx)
{x = nx;}
void Location :: sety (int ny)
{y = ny;}
Location :: Location (int _x, int _y)
{x = _x; y = _y;}
Операція дозволу контексту (::) дозволяє вказати компілятору, до якого з класів належить обумовлена ​​функція.
Ім'я класу у визначенні пишеться для того, щоб компілятор однозначно визначив до якого класу належить дана функція, так як функції - члени різних класів можуть мати однакові імена.
При визначенні класів не відбувається реального виділення пам'яті під об'єкти цього класу, а створюються лише нові похідні типи даних, для яких використовуватимуться функції - члени класу.
Для того, щоб почати роботу із реальними об'єктами якого класу, ці об'єкти необхідно спочатку визначити. При цьому в програмі необхідно вказати ім'я класу, об'єкт якого повинен бути створений, а також ім'я самого об'єкта. У кожного з класів може бути довільне число об'єктів.
4. Конструктори і деструктори
Конструктором називається функція-член класу, яка виділяє пам'ять під поля даних класу і проводить їх ініціалізацію, тобто задає початкові значення в місці оголошення змінних.
Ім'я конструктора збігається з ім'ям класу. Наприклад, у класі Location конструктор має наступний вигляд: Location (int _x, int _y). p> Конструктор не вертає ніякого значення, навіть void.
Одним з важливих властивостей конструктора є його автоматичний виклик при описі будь-якого об'єкта якого класу, що використовує конструктор, що знімає з програміста завдання своєчасного відстеження ініціалізації нововведених об'єктів.
У загальному випадку конструктори класів можуть мати списки параметрів, які можуть знадобитися при ініціалізації. При цьому програміст буде зобов'язаний задати список ініціалізації при описі кожного нового об'єкта.
Конструкторів в класі може бути багато. У цьому випадку реалізується механізм перевантаження функції. p> Якщо конструктори НЕ оголошені, компілятор сам створює конструктор без параметрів за замовчуванням.
Оголошення об'єктів можна проілюструвати наступним чином:
void main (Void)
{Location NK (0,0), KK (10,10), * PL;
cout <
PL = &NK;
cout < Gety ();// Значення, що повертається: 0
}
Тут при оголошенні NK (0,0) і KK (10,10) неявно викликаються конструктори.
cout <
cout < Gety () звернення йде через вказівник.
Конструктор копій
{Location A (1,1), B, D = A;
...}
Спочатку створюється об'єкт D і він ініціалізується значенням об'єкта A. Для ініціалізації потрібно явно визначити конструктор.
У конструкторі копій в Як параметр використовується проста або константная посилання на об'єкт.
Location :: Location ([const] Location & S)
{x = S.x; y = S.y}
Для кожного з об'єктів класу при очищенні пам'яті компілятором створюється деструктор за замовчуванням. Визначається деструктор наступним чином: ~ ім'я. Ім'я деструктора збігається з ім'ям класу, але з символом ~ (тильда) на початку.
Деструкція вирішує зворотну конструктором задачу, тобто очищає пам'ять.
Якщо в конструкторі об'єкта запитується динамічна пам'ять або відкривається файл, то при знищенні об'єкта необхідно передбачити дії з очищення пам'яті і закриття файлу. У цьому випадку користувачеві необхідно визначати деструктор. Цей деструкція буде викликатися при ...