二级C++模板:模板的定义

二级C++模板:模板的定义,第1张

二级C++模板:模板的定义,第2张

如果一个程序的功能是处理一个特定的数据类型,那么通过把处理过的数据类型声明为一个参数,可以把它重写为一个模板。C++程序是由类和函数组成的,所以C++的模板也分为类模板和函数模板。

1.函数模板的定义:

•模板的一般定义形式:

模板<类型形参表>返回FunctionName(形参表)类型

{

//函数定义体

}

•注意:⒈<类型表单参数表>可以包含基本数据类型以及类类型。如果是类类型,必须以class为前缀。

这个函数模板定义不是一个真正的函数,编译系统不会为它生成任何执行代码。这个定义只是对函数的描述,意味着它每次都可以单独处理类型表单参数表中指定的数据类型。

3.当编译系统发现有函数调用时:FunctionName(实参数表);根据实参数表中的类型,确认是否与函数模板中对应的形参数表匹配,然后生成一个重载函数。重载函数的定义体与函数模板的定义体相同,形式参数表的类型基于实参数表的实际类型。这个重载的函数叫做模板函数。

•模板函数和模板函数的区别:

函数是模板的定义,定义中使用了通用类型参数。

模板是真正的函数定义,是编译器系统在遇到特定的函数调用时产生的,有程序代码。

示例:# include

模板T Max(T&a,T&b)

T最大值(T a,T b)

{

返回a>b?甲:乙;

}

void main()

{

coutb?甲:乙;

}

这样,参数是什么数据类型,返回值是什么类型,从而避免了同一操作的重载定义。

此外,可以像普通函数一样重载模板函数。

示例2: # include

#包括

模板T max(T a,T b)

{

返回a>b?甲:乙;

}

char *max(char *a,char *b)

{

return (strcmp(a,b)?甲:乙);

}

void main()

{

cout类类名

{

//类声明体

}

模板<类型形参表>返回类型类名<类型名表>::MemberFunctionname1(形参表)

{

//成员函数定义体

}

模板<类型形参表>返回类型类名<类型名表>::MemberFunctionname2(形参表)

{

//成员函数定义体

}

模板<类型形参表>返回类型类名<类型名表>::MemberFunctionnamen(形参表)

{

//成员函数定义体

}

•注意:⒈类型和形式参数表与函数模板含义相同。在下面的成员函数定义中,classname <类型名表>中的类型名表是使用类型形参的。

这个类模板的定义其实只是对类的描述,并不是具体的类。

3.建立类模板后,可以通过创建类模板的实例来使用它。

Classname <类型实参数表>对象;

•模板和模板类的区别:

类是模板的定义,而不是真正的类,定义中使用了通用类型参数。

类是真正的类定义和类模板的实例化。类定义中的参数被实际类型替换。

例3:定义一个单向链表的模板类,分别实现添加、删除、查找、打印操作。

#包括

模板类列表

{

公共:

list();

void Add(T &);

无效删除(T &);

T * Find(T &);

void print list();

~ List();

私人:

结构节点{

Node * pNext

T * pT

};

Node * pFirst

}

模板列表::List()

{

p first = 0;

}

模板无效列表::添加(T&t)

{

node * temp =新节点;

temp-> pT = & t;

temp-> p next = p first;

pFirst = temp

}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 二级C++模板:模板的定义

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情