C++中的类模板详细讲述

C++中的类模板详细讲述

ID:38117903

大小:123.58 KB

页数:21页

时间:2019-06-06

C++中的类模板详细讲述_第1页
C++中的类模板详细讲述_第2页
C++中的类模板详细讲述_第3页
C++中的类模板详细讲述_第4页
C++中的类模板详细讲述_第5页
资源描述:

《C++中的类模板详细讲述》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一、类模板定义及实例化1. 定义一个类模板:1template23class类名{45//类定义......67}; 其中,template是声明类模板的关键字,表示声明一个模板,模板参数可以是一个,也可以是多个,可以是类型参数 ,也可以是非类型参数。类型参数由关键字class或typename及其后面的标识符构成。非类型参数由一个普通参数构成,代表模板定义中的一个常量。例:1template23//type为类型参数,width为非类型参数

2、45classGraphics;注意:(1)如果在全局域中声明了与模板参数同名的变量,则该变量被隐藏掉。(2)模板参数名不能被当作类模板定义中类成员的名字。(3)同一个模板参数名在模板参数表中只能出现一次。(4)在不同的类模板或声明中,模板参数名可以被重复使用。1typedefstringtype;23template45classGraphics67{89typenode;//node不是string类型1011typedefdoubletype;//错误:成员名

3、不能与模板参数type同名1213};1415template//错误:重复使用名为type的参数1617classRect;1819template//参数名”type”在不同模板间可以重复使用2021classRound;(5)在类模板的前向声明和定义中,模板参数的名字可以不同。1//所有三个Image声明都引用同一个类模板的声明23templateclassImage;45templateclassIma

4、ge;67//模板的真正定义89template1011classImage{//模板定义中只能引用名字”Type”,不能引用名字”T”和”U”};(6)类模板参数可以有缺省实参,给参数提供缺省实参的顺序是先右后左。1template23classImage;45template67classImage;(7)类模板名可以被用作一个类型指示符。当一个类模板名被用作另一个模板定义中的类型

5、指示符时,必须指定完整的实参表1template23classGraphics45{67Graphics*next;//在类模板自己的定义中不需指定完整模板参数表89};1011template1213voidshow(Graphics&g)1415{1617Graphics*pg=&g;//必须指定完整的模板参数表1819}2.类模板实例化定义:从通用的类模板定义中生成类的过程称为模板实例化。例:Graphicsgi;类模板什

6、么时候会被实例化呢?①当使用了类模板实例的名字,并且上下文环境要求存在类的定义时。②对象类型是一个类模板实例,当对象被定义时。此点被称作类的实例化点。③一个指针或引用指向一个类模板实例,当检查这个指针或引用所指的对象时。例:1template23classGraphics{};45voidf1(Graphics);//仅是一个函数声明,不需实例化67classRect89{1011  Graphics&rsd;//声明一个类模板引用,不需实例化1213  

7、Graphicssi;//si是一个Graphics类型的对象,需要实例化类模板1415}1617intmain(){1819  Graphcis*sc;//仅声明一个类模板指针,不需实例化2021  f1(*sc);//需要实例化,因为传递给函数f1的是一个Graphics对象。2223  intiobj=sizeof(Graphics);//需要实例化,因为sizeof会计算Graphics对象的大小,为了计算大小,编译器必须根据类模板定

8、义产生该类型。2425}3.非类型参数的模板实参要点:①绑定给非类型参数的表达式必须是一个常量表达式。②从模板实参到非类型模板参数的类型之间允许进行一些转换。包括左值转换、限定修饰转换、提升、整值转换。③可以被用于非类型模板参数的模板实参的种类有一些限制。例:1TemplateclassGraphics{…….};23TemplateclassRect{……..};45c

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

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

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