русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Контекстнозалежне ім’я класу


Дата додавання: 2014-04-22; переглядів: 943.


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

//контекстно залежне імя класу

#include<iostream>

#include<conio.h>

using namespace std;

const int MAX=100;

template<class Type>

class Stack

{private:

Type st[MAX];

int top;

public:

Stack() ;

void push(Type var);

Type pop();

};

/////////////

template<class Type>

Stack<Type>::Stack()

{top=-1;

}

 

template<class Type>

void Stack<Type>::push(Type var)

{st[++top]=var;

}

 

template<class Type>

Type Stack<Type>::pop()

{

return st[top--];

}

///////////

int main()

{ Stack<float> s1;

s1.push(1111.1F);

s1.push(2222.2F);

s1.push(3333.3F);

cout<<"1: "<<s1.pop()<<endl;

cout<<"2: "<<s1.pop()<<endl;

cout<<"3: "<<s1.pop()<<endl;

///////

Stack<long> s2;

s2.push(123123123L);

s2.push(234234234L);

s2.push(345345345L);

cout<<"1: "<<s2.pop()<<endl;

cout<<"2: "<<s2.pop()<<endl;

cout<<"3: "<<s2.pop()<<endl;

getch();

return 0;

}

 

Програма 14.4

 

 

Вираз template<class Type> повинен випереджати не тільки визначення класу, але й кожен метод, визначений поза тілом класу. От як виглядає функція push()

template<class Type>

void Stack<Type>::push(Type var)

{st[++top]=var;

}

Ім’я Stack<Type> використовується для того, щоб ідентифікувати клас, чиїм методом є push().

Для звичайного нешаблонного імені Stack було б достатньо

void Stack::push(var)

Але для шаблону функції доводиться використовувати ще й шаблонний аргумент Stack<Type>

Отже, ім’я шаблонного класу виглядає по-різному залежно від контексту. Всередині специфікації класу це просто ім’я Stack. Для методу, визначеного поза класом, це ім’я класу та ім’я шаблонного аргументу Stack<Type>. Коли ми визначаємо реальні об’кти для зберігання конкретного типу даних, іменем шаблонного класу буде ім’я класу та ім’я типу

Stack<float> s1;

 


<== попередня лекція | наступна лекція ==>
Шаблони класів | Створення класу зв’язних списків за допомогою шаблону


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн