Практикум по объектно-ориентированному программированию на базе языка с++ Учебно-методическое пособие



Pdf көрінісі
бет35/44
Дата21.02.2024
өлшемі0.49 Mb.
#492719
түріПрактикум
1   ...   31   32   33   34   35   36   37   38   ...   44
ООП С

Шаблоны классов. Шаблон класса является заготовкой, из кото-
рой создаются конкретные классы в процессе инстанцирования (то есть 
создания сущности, инстанции). Делается это путем подстановки кон-
кретного типа в качестве аргумента. Шаблон класса еще называют пара-
метризованным типом. Термин «параметризованный тип» эквивалентен 
терминам «шаблон класса» и «шаблон». Синтаксис класса-шаблона
выглядит так: 
 
template <параметры> // объявление шаблона 
class имя_класса 
// определение класса 
}; 
Параметр-тип объявляется как 
class имя или 
typename имя 
В проекте, состоящем из нескольких файлов, определение шаблона 
класса обычно выносится в отдельный файл. Но для того, чтобы инстан-
цировался конкретный экземпляр шаблона класса необходимо, чтобы 
определение шаблона находилось в одной единице трансляции с этим
экземпляром. Поэтому все определение шаблонного класса размещается 
в заголовочном файле, а затем этот файл подключается к нужным файлам 
с помощью директивы #include. Чтобы этот файл не включался повторно, 
используется директива #ifndef. 
При включении шаблона класса в программу никакие классы не 
генерируются до тех пор, пока не будет создан экземпляр шаблонного 
класса, в котором вместо параметра шаблона указывается конкретный 
тип. Экземпляр создается либо объявлением объекта, либо объявлением 
указателя на инстанцированный шаблонный тип с присваиванием ему
адреса с помощью операции new. Встретив такие объявления, компилятор 
создает код исходного класса. Пример класса-шаблона: 
60 
template  
class Array{ 
T & operator [] (int i) 

rangecheck (i); 
return data[i]; 

private: 
T* data; 
int size; 
void rangecheck (int i) const 
// проверка индекса

if (i >= size()) {throw std::range_error("Array - range!");} 
}}; 
Компилятор подставит вместо T формальный параметр. 
 
Array m; 
Array d


Достарыңызбен бөлісу:
1   ...   31   32   33   34   35   36   37   38   ...   44




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет