C++中的类模板详细.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C中的类模板详细讲述概要

一、类模板定义及实例化1.?定义一个类模板:1 templateclass 模板参数表23class 类名{45// 类定义......67 };?其中,template 是声明类模板的关键字,表示声明一个模板,模板参数可以是一个,也可以是多个,可以是类型参数?,也可以是非类型参数。类型参数由关键字class或typename及其后面的标识符构成。非类型参数由一个普通参数构成,代表模板定义中的一个常量。例:1 templateclass type,int width23//type为类型参数,width为非类型参数45class Graphics;注意:(1)如果在全局域中声明了与模板参数同名的变量,则该变量被隐藏掉。(2)模板参数名不能被当作类模板定义中类成员的名字。(3)同一个模板参数名在模板参数表中只能出现一次。(4)在不同的类模板或声明中,模板参数名可以被重复使用。 1 typedef string type; 2 3 templateclass type,int width 4 5class Graphics 6 7 { 8 9 type node;//node不是string类型1011 typedef double type;//错误:成员名不能与模板参数type同名1213 };1415 templateclass type,class type//错误:重复使用名为type的参数1617class Rect;1819 templateclass type //参数名”type”在不同模板间可以重复使用2021class Round;(5)在类模板的前向声明和定义中,模板参数的名字可以不同。 1// 所有三个 Image 声明都引用同一个类模板的声明 2 3 template class T class Image; 4 5 template class U class Image; 6 7// 模板的真正定义 8 9 template class Type1011class Image { //模板定义中只能引用名字”Type”,不能引用名字”T”和”U” };(6)类模板参数可以有缺省实参,给参数提供缺省实参的顺序是先右后左。1 template class type, int size = 102423class Image;45 template class type=double, int size 67class Image;(7)类模板名可以被用作一个类型指示符。当一个类模板名被用作另一个模板定义中的类型指示符时,必须指定完整的实参表 1 templateclass type 2 3class Graphics 4 5 { 6 7 Graphics *next;//在类模板自己的定义中不需指定完整模板参数表 8 9 };1011 template calss type1213void show(Graphicstype g)1415 {1617 Graphicstype *pg=g;//必须指定完整的模板参数表1819 }2.类模板实例化定义:从通用的类模板定义中生成类的过程称为模板实例化。例:Graphicsint gi;类模板什么时候会被实例化呢?①当使用了类模板实例的名字,并且上下文环境要求存在类的定义时。②对象类型是一个类模板实例,当对象被定义时。此点被称作类的实例化点。③一个指针或引用指向一个类模板实例,当检查这个指针或引用所指的对象时。例: 1 templateclass Type 2 3class Graphics{}; 4 5void f1(Graphicschar);// 仅是一个函数声明,不需实例化 6 7class Rect 8 9 {1011   Graphicsdouble rsd;// 声明一个类模板引用,不需实例化1213   Graphicsint si;// si是一个Graphics类型的对象,需要实例化类模板1415 }1617int main(){1819   Graphcischar* sc;// 仅声明一个类模板指针,不需实例化2021   f1(*sc);//需要实例化,因为传递给函数f1的是一个Graphicsint对象。2223   int iobj=sizeof(Graphicsstring);//需要实例化,因为sizeof会计算Graphicsstring对象的大小,为了计算大小,编译器必须根据类模板定义产生该类型。2425 }3.非类型参数的模板实参要点:①绑定给非类型参数的表达式必须是一个常量表达式。②从模板实参到非类型模板参数的类型之间允许进行一些转换。包括左值转换、限定修饰转换、提升、整值转换。③可以被用于非类型模板参数的模板实参的

文档评论(0)

6663144 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档