文档介绍:模板
模板与使用
模板就是使程序能够对不同类型的数据进行相同方式的处理。C++中的模板分为类模板和函数模板。
类模板
说明类模板的一般格式为:
template <类型参数表> class 类模板名
{ private:
私有成员定义
protected:
保护成员定义
public:
公有成员定义};
模板与使用
其中:(1)类型形式参数表可以包含基本数据类型,也可以包含类类型,如果是类类型,则须加前缀class。当参数有多个时,需用逗号隔开。
(2)类模板中的成员函数的定义,可以放在类模板的定义体中(此时与类中的成员函数的定义方法一致),也可以放在类模板的外部定义成员函数,此时成员函数的定义格式如下:
template <类型形式参数表>
函数值的返回类型类模板名<类型名表>::成员函数(形参) { 函数体}
其中:类模板名即是类模板中定义的名称;类型名表即是类模板定义中的类型形式参数表中的参数名。
模板与使用
(3)利用类模板定义的只是对类的描述,它本身还不是一个实实在在的类。因此是类模板。
(4)要定义类模板的对象(即实例),需要用下列格式的语句:
类模板名<类型实际参数表> 对象名;
【例】定义类模板ABC,内含成员函数set和get。用ABC生成对象abc1和abc2。它们的数组元素数不同,显示的结果也不同。
# include <>
// 定义类模板ABC
template <class T, int I> class ABC
{ private:
T array [I] ; // 定义数组array
模板与使用
public:
void set (int x) // 定义成员函数set
{ int i;
for (i=0; i<I; i++) //循环I次
array[i]=x+i; //数组元素赋值
}
void get () //定义成员函数get
{ cout <<"\n 数组元素总数为:"<< I<<endl;
cout <<" array["<<I-1<<"]="<<array[I-1]<<endl; }
};
void main()
{ //由模板ABC生成对象abc1
模板与使用
ABC <int,50> abc1;
(0); //
(); //
//由模板ABC生成对象abc2
ABC <int,100> abc2;
(10); //
(); //
}
以下是对上例中的成员函数定义体放于类模板外部定义的示例。
【例】定义模板ABC,内含成员函数set和get。用ABC生成对象abc1和abc2。它们的数组元素数不同,显示的结果也不同。
模板与使用
#include <>
// 定义类模板ABC
template <class T, int I> class ABC
{ private:
T array [I] ; // 定义数组array
public:
void set (int x); // 定义成员函数set
void get () ; //定义成员函数get
};
template <class T,int i>
void ABC<T,i> ::set (int x) // 定义成员函数set
{ int i;
模板与使用
for (i=0; i<I; i++) //循环I次
{ array[i]=x+i; } //数组元素赋值
}
template <class T,int i>
void ABC<T,i>::get()
{ cout <<"\n 数组元素总数为:"<< I<<endl;
cout <<" array["<<I-1<<"]="<<array[I-1]<<endl; }
void main()
{ //由模板ABC生成对象abc1
ABC <int,50> abc1;
(0); //
(); //
模板与使用
//由模板ABC生成对象abc2
ABC <int,100> abc2;
(10); //
(); //
}
类模板的使用方法可以总结为:
(1) 给出类模板的定义体。
(2)在适当的位置创建一个类模板的实例,即一个实实在在的类定义,同时创建该模板类的对象。
(3)有了对象名,以后的使用就和普通类的