类模板和函数模板十分类似。
引进类模板提高了代码的重用率,减少了程序员的重复劳动。
template<class AType>
class array{
public:
array(int size);
~array(){
delete[] a;
}
AType & operator[](int i);
private:
int length;
AType * a;
};
template<class AType>
array <AType>::array(int size){
register int i;
length=size;
a=new AType[size];
if(!a) {
exit();
}
for(i=0;i<size;i++){
a[i]=0;
}
}
template<class AType>
AType &array<AType>::operator[](int i){
if(i<0||i>length-1){
exit{2};
}
return a[i];
}
类模板是一个类型参数化的样板,它是一组模板类的集合。模板类是某个类模板的实例,使用某种类型来替换某个类模板的模板参数可以生成该类模板的一个模板类。
类模板应用举例
#include<iostream>
#include<cstdlib>
using namespace std;
template<class T>
class stack{
public:
stack(int size);
~stack(){
delete [] stck;
}
void push(T i );
T pop();
private:
int tos,length;
T * stck;
};
template<class T>
stack <T>::stack(int size){
stck=new T[size];
if(!stck){
exit(1);
}
length=size;
tos=0;
}
template<class T>
void stack<T>::push(T i){
if(tos==length){
cout<<"Full"<<endl;
}
stck[tos]=i;
tos++;
}
template<class T>
T stack<T>::pop(){
if(tos==0) {
cout<<"Underflow"<<endl;
}
tos--;
return stck[tos];
}
int main(){
stack<int> a(10);
stack<double> b(10);
stack<char> c(10);
a.push(15);
b.push(19.2);
for(int i(0);i<10;i++){
c.push((char)'J'-i);
cout<<c.pop();
}
}
其中a,b,c分别是不同模板类的对象