摘要:下面希赛小编为大家整理的软考程序员知识点C++语言程序设计之类模板,希望能帮助学友们。
下面希赛小编为大家整理的软考程序员知识点C++语言程序设计之类模板,希望能帮助学友们。具体内容如下:
类模板,模板的类型参数由关键字class或关键字typename及其后的标识符构成。在模板参数表中关键字class和typename的意义相同。(在标准C++之前关键字typename没有被支持,把这个关键字加入到C++中的原因是因为有时必须要靠它来指导编译器解释模板定义。)
例子
定义类模板的一般形式是:
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 Smemory<T>::mput(T x)
{…}
表示定义一个类模板Smemory的成员函数,函数名为mput,形参x的类型是T,函数无返回值。
类模板是一个类家族的抽象,它只是对类的描述,编译程序不为类模板(包括成员函数定义)创建程序代码,但是通过对类模板的实例化可以生成一个具体的类以及该具体类的对象。
与函数模板不同的是:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定,
其实例化的一般形式是:
类名<数据类型1(或数据),数据类型2(或数据)…>对象名
例如,Smemory<int>mol;
表示将类模板Smemory的类型参数T全部替换成int型,从而创建一个具体的类,并生成该具体类的一个对象mol。
类模板示例:
类模板定义定义一个类模板,一般有两方面的内容:
A.首先要定义类,其格式为:
template<class T>//或用template<typename T>
class foo
{
……
}
foo为类名,在类定义体中,通用类型T可以作为普通成员变量的类型,还可以作为const和static成员变量以及成员函数的参数和返回类型之用。例如:
template<class 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.在类定义体外定义成员函数时,若此成员函数中有模板参数存在,则除了需要和一般类的体外定义成员函数一样的定义外,还需在函数体外进行模板声明
例如
template<class T>
Test<T>::Test(T k):i(k){n=k;cnt++;}
如果函数是以通用类型为返回类型,则要在函数名前的类名后缀上“<T>”(注:所有函数都要加“<T>”)。例如:
template<class T>
T Test<T>::operator+(T x){
return n+x;
}
C.在类定义体外初始化const成员和static成员变量的做法和普通类体外初始化const成员和static成员变量的做法基本上是一样的,区别是需在对模板进行声明,例如
template<class T>
int Test<T>::cnt=0;
template<class T>
Test<T>::Test(T k):i(k){n=k;cnt++;}
希赛软考网,拥有十四年软考培训经验,希赛网一直坚持自主研发,将丰富的软考培训经验有效融入教程研发过程,自成体系的软考在线题库(软考历年真题)、软考培训教材和软考视频教程,多样的培训方式包括在线辅导、面授、和,使考生的学习更具系统性,辅导更具针对性。采用全程督学机制,,软考平均通过率在全国。
软考备考资料免费领取
去领取