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

Шаблонний клас може за замовчуванням визначати аргумент, який відпові­дає узагальненому типу. Наприклад, внаслідок оголошення такої template-специ фі- кації

template <class aType=int> class myClass {//...

використовуватиметься тип int, якщо при створенні об'єкта класу myClass відсутнє задавання будь-якого типу.

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

Розглянемо ще одну версію класу безпечного масиву, у якому використову­ються аргументи за замовчуванням як для типу даних, так і для розміру масиву.

Код програми 7.10. Демонстрація механізму використання шаблонних аргументів за замовчуванням

#include <vcl>

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

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

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

// Тут параметр аТуре за замовчуванням приймає тип int, а параметр // size за замовчуванням встановлюється таким, що дорівнює 10. template <class aType=int, int size=10> class arrClassj

aType aMas[size]; // Через параметр size передається розмір масиву, public:

arrClassO {for(int i=0; i<size; І++) aMas[i] = i;} arrClass &operator[](int i);

};

// Забезпечення контролю меж для класу аТуре.

template <class аТуре, int size> аТуре &arrClass<aType, size>::operator[](int і)

{

if(i<0 у i> size-1) {

cout « "Значення індексу " « і « " за межами масиву" « endl; exit(1);

}

return aMas[i];

}

Int mainO

{

arrClass<int, 100> intMas; // 100-елементний масив цілих чисел arrClass<double> doubleMas; //10-елементний масив double-значень

// (розмір масиву встановлено за замовчуванням) arrClasso defMas; //10-елементний масив int-значень

// (розмір і тип int встановлені за замовчуванням)

cout « "Масив цілих чисел: for(int і=0; і<100; І++) intMasp] = і; for(int і=0; і<100; І++) cout « intMas[i] « " "; cout « endl;

cout « "Масив double-значень: "; for(int i=0; i<10; І++) doubleMas[i] = i/3.0; for(int i=0; i<10; І++) cout « doubleMas[i] « " "; cout « endl;

cout « "Масив за замовчуванням: "; for(int i=0; i<10; І++) defMasp] = i; for(int i=0; i<10; І++) cout « defMasp] « " "; cout « endl;

getchO; return 0;

}

Внаслідок виконання ця програма відображає на екрані такі результати: Масив int-значень: 012345678910111213 14 1516 17 18...99 Масив doubte-значень: 0 0.333333 0.666667 1 1.333333 1.666667 2 2.333333 2.666667 З Масив за замовчуванням: 0123456789

Зверніть особливу увагу на цей рядок:

template <class aType=int, int size=10> class arrClass {

У цьому записі параметр аТуре за замовчуванням замінюється типом int, а пара­метр size за замовчуванням встановлюється таким, що дорівнює числу 10. Як по­казано у наведеному вище коді програми, об'єкти класу аТуре можна створити трьома способами:

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

  • задавши безпосередньо тільки тип масиву, при цьому його розмір за замовчуванням встановлюється таким, що дорівнює 10 елементам;

  • взагалі без задавання типу і розміру масиву, при цьому він за замовчуванням зберіга­тиме елементи типу int, а його розмір за замовчуванням встановлюється таким, що дорівнює 10.

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