|
Программирование >> Программирование на языке c++
tances) этого типа или объекты (объект 1, ... , объект j, ... , объект т). Особенностью этих объектов является то, что они имеют общую структуру и общее поведение, заданные классом массив символов . Рассмотрим примеры. Первая программа демонстрирует построение стека (STACK) элементов типа Т, где Т передается в класс STACK в виде параметра. #include <iostream.h> template <class Т> class STACK { T *top,*sp; top - указатель на начало стека, sp - значение текущего указателя стека int size; size - размер стека (число элементов в стеке) public: STACK(int n) { top = sp = new T[size=n]; } конструктор ~STACK() { delete[] top; } деструктор void operator+=(T v) { if (size > sp-top) *sp-H- = v; else cerr ERROR\n ; } T operator~() { if(sp==top) { cerr error.\t ; return *sp;} return *~sp; } void operator~() const { cout << size = << (sp-top) endl; } void main(void) { STACK<int> si{2); объявление стека целых размером 2 ~si; Результат; size = О si-l-=100; (целое 100 в стек) si-b=1555; (целое 1555 в стек) si-l-=7; (целое 7 в стек) - ошибка, результат: ERROR -si; Результат: size = 2 cout ~si (pop 1) endl; Результат: 1555 (pop 1) cout -si (pop 2) endl; Результат: 100 (pop 2) cout ~si (pop 3) endl; Результат: error.lOO (pop 3) ~si; Результат: size = 0 В программе вьтолнено доопределение следующих операторов для класса STACK: ф ~ используется как унарный оператор для вывода на экран размера стека; +- используется как бинарный оператор, левым операндом которого является стек типа STACK и правым операндом - объект, который заталкивается в стек (т. е. здесь выполняется операция затолкнуть - push); -♦ - используется как унарный оператор для получения объекта из стека (т. е. здесь выполняется операция вытолкнуть - pop). Вторая программа показывает построение стека студентов. #include <iostream.h> #include <string.h> template <class T> class STACK { T *top,*sp; int size; public: STACK(int n) { top = sp = new T[size=n]; } -STACKO { delete[] top; } void operator-b=(T v) { if (size > sp-top) *sp-f-b = v; else cerr ERROR\n ; } T operator~() { if(sp==top) { cerr error:\t ; return *sp; } return *~sp; void operator~() const { cout size = << (sp-top) endl; } class student { класс студент int age; возраст char name[20]; имя public: studentO {} конструктор, заданный no умолчанию второй конструктор student(char nm[],int a) : age(a) { strncpy(name,nm,20); } Шаблоны функций (передача типа в функцию в виде параметра) void displayO { cout age name endl; } другие функции void main(void) { STACK<student> ss(3); стек ss студентов из трех элементов student s1( Julja ,20), s2( Tanja ,42), s3( Olja ,39); конструирование трех объектов типа student ~ss; Результат: size = О ss+=s1; заталкивание в стек объекта si ss+=s2; заталкивание в стек объекта s2 ss+=s3; заталкивание в стек объекта s3 ~ss; Результат: size = 3 (-ss).display(); Результат: 39 OIja (-ss).displayO; Результат: 42 Tanja (-ss).display(); Результат: 20 Juija ~ss; Результат: size = 0 Точно так же можно строить стеки других объектов, а по аналогии - другие шаблоны, в которые тип передается в виде параметра, например очереди, списки и т. п. 6.2. Шаблоны функций (передача типа в функцию в виде параметра) Рассмотрим локальные и глобальные функции. К локальным функциям будем относить функции-компоненты класса. При передаче в класс типа в виде параметра (при рассмотрении параметризированного класса) часто возникает необходимость в передаче этого параметра в локальную функцию-компонент класса. В результате возникает необходимость описания семейства функций, каждая из которых отличается типами используемых в ней переменных. Такое семейство функций можно сопоставить с семейством классов, представленных единым параметризированным классом.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |