Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/studb20/public_html/index.php on line 4
 2.13 Локальні класи. - Програмування С, С++теорія та практика (частина 2) - Studbook

Програмування С, С++теорія та практика (частина 2)

2.13 Локальні класи.

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

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

#іпс1ийе<іоз'Ьгеат.Ь>

Vоій £ ^оій) ; іп£ таіп^оій)

{

// Буде викликано функцію, що містить локальний клас £() ;

ге'Ьигп 0;

}

VОІЙ £ ^оій)

{

с1азз Ьоса1 {

іп£ мЬо; риЬ1іс:

Ьоса1(іп£ а)

{

мЬо=а;

сои^<<"Конструктор локального класу"

<<мЬо<<"\п";

}

~Ьоса1(VОій)

{

сои^<<"Деструктор локального класу"

<<мЬо<<"\п";

}

} 1ос_оЬ(1), 1ос_оЬ1(2);

}

В результаті роботи даної програми ми отримаємо:

Конструктор локального класу 1 Конструктор локального класу 2 Деструктор локального класу 2 Деструктор локального класу 1

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

 

53