Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Не підтверджено.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.08 Mб
Скачать
  1. Механізм реалізації безпосередньо заданої спеціалізації класів

Подібно до шаблонних функцій можна створювати і спеціалізації узагальне­них класів. Для цього використовується конструкція templateo, яка працює за ана­логією із безпосередньо заданими спеціалізаціями функцій. Розглянемо такий приклад.

Код програми 7.11. Демонстрація безпосередньо заданої спеціалізації класів #include <vcl>

#include <iostream> // Для потокового введення-виведення

#include <conio> // Для консольного режиму роботи

using namespace std; // Використання стандартного простору імен

template <class tType> class myClass { // Оголошення класового типу tType х; public:

myClass(tType ObjA) {cout«"У тілі узагальненого класу myClass" « endl; x = ObjA;} tType getXO {return x;}

};

// Безпосередня спеціалізація для типу int. template <> class myClass<int> { int x; public:

myClass(int a) {cout«"У тілі спеціалізації myClass<int>"« endl; x = a * a;} int getXO {return x;}

};

Int mainO

{

myClass<double> ObjD(10.1);

cout«"double:" « ObjD.getX() « endl « endl;

myClass<int> 0bjl(5);

cout«"int:" « Objl.getX() « endl;

getchO; return 0;

}

Внаслідок виконання ця програма відображає на екрані такі результати:

У тілі узагальненого класу myClass. double: 10.1

У тілі спеціалізації myClass<int>. int: 25

У цьому коді програми зверніть особливу увагу на такий рядок: template <> class myClass<int> {

Він повідомляє компіляторові про те, що створюється безпосередня int-спеціалі- зація даних класу myClass. Аналогічний синтаксис використовується і для будь- якого іншого типу спеціалізації класу.

Безпосередня спеціалізація класів розширює діапазон застосування узагаль­нених класів, оскільки вона дає змогу легко обробляти один або два спеціальні ви­падки, залишаючи всю решту варіантів для автоматичного оброблення компілято­ром. Але, якщо Ви побачите, що у Вас створюється дуже багато спеціалізацій, то тоді, можливо, краще взагалі відмовитися від створення шаблонного класу.

Розділ 8. МЕХАНІЗМИ ОБРОБЛЕННЯ ВИНЯТКОВИХ СИТУАЦІЙ

У цьому розділі розглядаються механізми оброблення різних виняткових си­туацій. Виняткова ситуація (або виняток) - це помилка, яка виникає у процесі ви­конання програми. Використовуючи С++-підсистему оброблення виняткових си­туацій, такі помилки легко можна виправляти. їх виникнення під час роботи коду програми автоматично призводить до виклику так званого обробника винятків. При цьому програміст не забезпечує перевірку результату виконання кожної кон­кретної операції або функції "вручну". У цьому й полягає принципова перевага системи оброблення винятків, оскільки саме вона відповідає за код оброблення помилок, який раніше доводилося "вручну" вводити в громіздкі програми.

У цьому розділі також розглянемо С++-оператори динамічного розподілу пам'яті: new і delete. Як пояснювалося вище у цьому навчальному посібнику, якщо оператор new не може виділити необхідну пам'ять, то він генерує винятки. Як саме обробляються такі винятки якраз і буде розглянуто у цьому розділі. Окрім цього, тут ми навчимося перевизначати оператори new і delete, що дасть змогу визначати власні схеми виділення області пам'яті.