1.定义语法:
template <模板参数表> class 类名 类体
注:
模板类型参数 typename id
模板非类型参数 例如: int n
类体中可以出现的类型有 a. 基本数据类型 b. 用户自定义类型 c. 模板类型参数 d. 类名
2.模板实例化
(1)从类模板生成具体类的过程
(2)时机:定义对象时; 指针或者引用解引用(*p)时;
(3)语法:
类模板名<实参表>
例:
Node <int> x;
Node <double> *p;//注意,此时不会实例化模板
示例程序:stack模板
#include "stdafx.h"
#include <iostream>
using namespace std;
template <typename T> class Stack;
template <typename T> class StackItem
{
public:
T info;
StackItem *next;
StackItem(T x)
{
//cout << "StackItem constructor" << endl;
info = x;
next = NULL;
}
friend class Stack<T>;
};
template <typename T> class Stack
{
StackItem<T> * top;
public:
Stack()
{
//cout << "Stack constructor" << endl;
top = NULL;
}
void push(T x)
{
StackItem<T> *p = new StackItem<T>(x);
p->next = top;
top = p;
}
T pop()
{
if(top == NULL)
{
throw 1;
}
StackItem<T> * p = top;
top = top->next;
T x = p->info;
delete p;
return x;
}
};
void main()
{
Stack<double> a;
a.push(1.3);
a.push(9);
cout << a.pop() << endl;
cout << a.pop() << endl;
}