Программирование >>  Программирование на языке c++ 

1 ... 72 73 74 [ 75 ] 76 77 78 ... 159


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. Шаблоны функций

(передача типа в функцию

в виде параметра)

Рассмотрим локальные и глобальные функции. К локальным функциям будем относить функции-компоненты класса. При передаче в класс типа в виде параметра (при рассмотрении параметризированного класса) часто возникает необходимость в передаче этого параметра в локальную функцию-компонент класса. В результате возникает необходимость описания семейства функций, каждая из которых отличается типами используемых в ней переменных. Такое семейство функций можно сопоставить с семейством классов, представленных единым параметризированным классом.



1 ... 72 73 74 [ 75 ] 76 77 78 ... 159

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика