类模板类模板的使用
时间:2023-02-17 18:04:02 | 来源:营销百科
时间:2023-02-17 18:04:02 来源:营销百科
类模板类模板的使用:定义类模板的一般形式是:
template 类型名参数名1,类型名 参数名2,…
class 类名
{
类声明体
};
例如,template class T
class Smemory
{…
public:
void input(T x);
…
}
表示定义一个名为Smemory的类模板,其中带类型参数T。
在类模板的外部定义类成员函数的一般形式是:
template 类型名参数名1,类型名 参数名2,…
函数返回值类型 类名参数名 1 参数名 2,…::成员函数名(形参表)
{
函数体
}
例如:template class T
void SmemoryT::input(T x)
{…}
表示定义一个类模板Smemory的成员函数,函数名为input,形参x的类型是T,函数无返回值。
类模板是一个类家族的抽象,它只是对类的描述,编译程序不为类模板(包括成员函数定义)创建程序代码,但是通过对类模板的实例化可以生成一个具体的类以及该具体类的对象。
与函数模板不同的是:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定,
其实例化的一般形式是:
类名 数据类型 1(或数据),数据类型 2(或数据)… 对象名
例如,Smemoryint mol;
表示将类模板Smemory的类型参数T全部替换成int 型,从而创建一个具体的类,并生成该具体类的一个对象mol。
类模板示例:类模板定义 定义一个类模板,一般有两方面的内容:
A. 首先要定义类,其格式为:
template class T //或用 templatetypename T
class foo
{
……
}
foo 为类名,在类定义体中,通用类型T可以作为普通成员变量的类型,还可以作为const和static成员变量以及成员函数的参数和返回类型之用。例如:
templateclass T
class Test{
private:
T n;
const T i;
static T cnt;
public:
Test():i(0){}
Test(T k);
~Test(){}
void print();
T operator (T x);
};
B. 在类定义体外定义成员函数时,若此成员函数中有模板参数存在,则除了需要和一般类的体外定义成员函数一样的定义外,还需在函数体外进行模板声明
例如
templateclass T
TestT::Test(T k):i(k){n=k;cnt ;}
如果函数是以通用类型为返回类型,则要在函数名前的类名后缀上'T' (注:所有函数都要加'T' )。例如:
templateclass T
T TestT::operator (T x){
return n x;
}
C. 在类定义体外初始化const成员和static成员变量的做法和普通类体外初始化const成员和static成员变量的做法基本上是一样的,唯一的区别是需在对模板进行声明,例如
templateclass T
int TestT::cnt=0;
templateclass T
TestT::Test(T k):i(k){n=k;cnt ;}