首先声明:非原创!
来自:http://blog.csdn.net/nomad2/article/details/886503
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;
}
来自:http://blog.csdn.net/hangyu628/article/details/3868006
C++ 模板类定义与声明
声明和使用类模板: 如果在类模板外定义成员函数,应写成类模板形式:
template<class 虚拟类型参数>
函数类型 类模板名<虚拟类型参数>∷成员函数名(函数形参表列) {…}
测试的模板类,如下:
//Compare.h
#ifndef _COMPARE_H
#define _COMPARE_H
template <typename T>
class Compare
{
public:
~Compare(void);
Compare(T,T);
T max();
T min();
private:
T x;
T y;
};
#endif
//Compare.cpp
#include "Compare.h"
#include <iostream>
using namespace std;
template <typename T>
Compare<T>::Compare(T a,T b)
{
x=a;
y=b;
}
template <typename T>
Compare<T>::~Compare(void)
{
}
template <typename T>
T Compare<T>::max()
{
return (x>y)?x:y;
}
template <typename T>
T Compare<T>::min()
{
return (x<y)?x:y;
}
#include "Compare.h"
int main()
{
Compare<int> tt(1,2);
cout<<tt.max()<<endl;
system("pause");
getchar();
return 0;
}