模板template的用法

模板template的用法

ID:37766928

大小:17.02 KB

页数:5页

时间:2019-05-30

模板template的用法_第1页
模板template的用法_第2页
模板template的用法_第3页
模板template的用法_第4页
模板template的用法_第5页
资源描述:

《模板template的用法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、template的用法--template的用法在程序设计当中经常会出现使用同种数据结构的不同实例的情况。例如:在一个程序中可以使用多个队列、树、图等结构来组织数据。同种结构的不同实例,也许只在数据元素的类型或数量上略有差异,如果对每个实例都重新定义,则非常麻烦且容易出错。那么能否对同种类型数据结构仅定义一次呢?答案是肯定的,C++提供的类模板(ClassTemplate)就可以实现该功能。一、类模板类模板是C++提供的一种特殊机制,通过它我们可以定义一种特殊的类(称为模板类),在类的定义中可以包含待定的类型参数,在声明类的实例时,系统会自动根据传递的类型生成用户想要生成的

2、类实例。下面是用C++实现的一个简单的模板类Clist的定义。TemplateclassCList{public:intSetItem(intIndex,constT&Item);intGetItem(intIndex,T&Item);private:TBuffer;}在这里,T是类型参数,I是整型常量参数。T和I的实际值是在声明具体类实例时指定的。模板类的<>号内可以包括任意个类型参数和常量参数(至少要有一个参数)。类型参数和常量参数可以是任何合法的标准类型和用户自定义类型,包括简单类型及各种结构体。同其他类一样,类成员函数SetItem的实现可

3、以在类定义内完成,也可以在类CList定义处实现:templateintCList::SetItem(intIndex,constT&Item){if((Index<0)

4、

5、(Index>I-1)) return0;//出错Buffer[Index]=Item; return1;//成功}值得注意的是,在类定义外完成函数实现时,必须以关键字template和类模板定义中相同的参数表(<>号内的)开头(上例为template),并且范围分解操作符前的类名后应跟上模板参数名清单(上例为CList)。另外,与

6、非模板类不同的是,必须将函数实现包括在调用它的每个源文件中,使编译器能从函数实现产生代码。通常的做法是将模板类的函数实现也放在定义该类的头文件中,这样只需在调用的源文件中包含该头文件即可。那么,如何使用生成特定的类实例呢?我们可以像使用其他类一样来使用模板类,不过必须指定模板参数的值。例如采用如下声明:CListIntList;则使IntList成为CList类的实例,每次出现的T参数都换成int,每次出现的I参数都换成100。这样,IntList类中的Buffer就是一个长度为100的整型数组,SetItem和GetItem函数参数是int值的引用。例:

7、IntList.SetItem(0,5);//给数组第一个元素赋为整数5模板类还可以像其他类一样可以定义构造函数和析构函数。下面我们以一种简单的数据结构——堆栈为例,来说明如何用类模板来构造通用数据结构。二、利用类模板实现通用堆栈结构任何抽象数据结构在计算机中的实现,归根结底都只有两种方式:顺序存储(用数组实现),链式存储(用指针实现)。堆栈也不例外,按其实现方式可分为顺序栈(用数组实现)和链栈(用指针实现)。1.通用顺序栈的实现因为顺序栈中的元素在空间上连续存储,栈顶的元素位置需要注明,所以构造顺序栈的模板类应该有这样的一些成员变量:一个待定类型和长度的数组Buffer,

8、一个记录栈顶元素的数组下标的整型变量top。堆栈的基本操作主要有:入栈(Push)、出栈(Pop)、置空(SetEmpty)、判断当前状态(IsEmpty)等,它们应用模板类的成员函数来实现。作为一个标准的类,它还应该有自己的构造函数和析构函数。具有这些功能的模板类,就可以作为一个通用的顺序栈来使用了。该类的定义如下:templateclassCArrayStackTemp{public:CArrayStackTemp()//缺省构造函数,构造一个空堆栈{top=-1;};~CArrayStackTemp(){};//析构函数 voidSet

9、Empty();//置空堆栈 boolIsEmpty();//判断堆栈是否为空 boolPush(Telement);//入栈 boolPop(T&element);//出栈private:TBuffer[SIZE]; inttop;};与堆栈的基本操作相对应的成员函数的实现如下:templatevoidCArrayStackTemp::SetEmpty(){top=-1;//将栈顶指针赋-1,并不实际清除数组元素}templatebo

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。