Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / ооп / 4_кол / Лекції / 6. Об'єктно-орієнтоване програмування, л.1.6.ppt
Скачиваний:
23
Добавлен:
30.05.2020
Размер:
87.04 Кб
Скачать

Статичні поля

Пам'ять під статичне поле виділяється один раз

class A {

 

public: static int count;

/* Оголошення */

};

 

int A::count;

// Визначення

// int A::count = 10;

Варіант визначення

поля доступні через ім'я класу і через ім'я об'єкта:

A *a, b; cout << A::count << a->count << b.count;

На статичні поля поширюється дія специфікаторів доступу, тому статичні поля, описані як private, можна змінити лише за допомогою статичних методів.

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

1

Статичні методи

class A{

static int count;

public:

static void inc_count(){ count++; }

};

A::int count; void f(){

A a;

// a.count++ — неможна

a.inc_count(); // або A::inc_count();

2

Дружні функції і класи

Дружня функція оголошується всередині класу, до елементів якого їй потрібен доступ, с ключовим словом friend.

Друня функція може бути звичайною функцією або методом іншого раніше визначеного класу.

Одна функція може бути дружньою одразу кільком класам.

3

Дружені функції - приклад

class monstr; class hero{ public:

void kill(monstr &);

};

class monstr{

friend int steal_ammo(monstr &); friend void hero::kill(monstr &);

};

int steal_ammo(monstr &M){return --M.ammo;} void hero::kill(monstr &M){

M.health = 0; M.ammo = 0;

}

4

Дружні класи - приклад

class hero{

...

friend class

}

class mistress{

...

void f1(); void f2();

}

5

Деструктори

Деструктор викликається автоматично, коли об'єкт виходить з області бачення:

для локальних об'єктів — при виході з блока, в якому вони оголошені;

для глобальних — як частина процедури виходу з main ();

для об'єктів, заданих через вказівники, деструктор викликається неявно при використанні операції delete.

Пример деструктора: monstr::~monstr() {delete [] name;}

6

Деструктор можна викликати явним чином - шляхом зазначення повністю уточненого імені, наприклад:

monstr *m; ...

m -> ~monstr();

Деструктор:

не має аргументів і значення, що повертається;

не може бути оголошений як const або static;

не спадкується;

може бути віртуальним

якщо деструктор явним чином не визначений, компілятор автоматично створює пустий деструктор.

7