C++模板专题详细介绍.pdf
文本预览下载声明
本文作者:黄邦勇帅
学习本文需要对的构造函数,中的各种类成员,中类的继承,有一定的了解。
模板是中的重点内容,因此应熟悉模板的使用,本文是的模板专题,因此本文集中介绍了的模板问题,
主要介绍了类模板和函数模板的形参与实参这是学习模板的关键内容,模板的具体化特化方法,模板实参推演,模板
函数的匹配,类模板中的模板成员,模板与继承,模板与友元, 关键字。本文内容全面,简单易懂,是对于学
习模板模棱两可的读者的很好的参考文现。
本文内容完全属于个人见解与参考文现的作者无关,其中难免有误解之处,望指出更正。
声明:禁止抄袭本文,若需要转载本文请注明转载的网址,或者注明转载自 “黄邦勇帅”。
主要参考文献:
、第五版中文版 美 著 孙建春 韦强译 人民邮电出版社 年 月
、第四版中文版 、 著 李师贤等译 人民邮电出版社 年 月
、第三版中文版 等著 潘爱民 张丽译 中国电力出版社 年 月
、入门经典 第三版 美 著 李予敏译 清华大学出版社 年 月
、参考大全 第四版 美 著 周志荣 朱德芳 于秀山等译 电子工业出版社 年 月
、 天学通 第四版 美 著 康博创作室 译 人民邮电出版社 年 月
第 17 章 模板
使用模板的目的就是能够让程序员编写与类型无关的代码。比如编写了一个交换两个整型 类型的 函数,这
个函数就只能实现 型,对,字符这些类型无法实现,要实现这些类型的交换就要重新编写另一个 函数。
使用模板的目的就是要让这程序的实现与类型无关,比如一个 模板函数,即可以实现 型,又可以实现 型
的交换。模板可以应用于函数和类。下面分别介绍
注意:模板的声明或定义只能在全局,命名空间或类范围内进行。即不能在局部范围,函数内进行,比如不能在
函数中声明或定义一个模板。
一、模板函数通式
、模板函数的通用形式为: 形参名, 形参名 反回类型 函数名参数列表函数体。其中
和 是关见字, 可以用 关见字代替,在这里 和 没区别,括号中的参数叫模板形
参,模板形参和函数形参很相像,模板形参不能为空。一但声明了模板函数就可以用模板函数的形参名声明类中的
成员变量和成员函数,即可以在该函数中使用内置类型的地方都可以使用模板形参名。模板形参需要调用该模板函
数时提供的模板实参来初始化模板形参,一旦编译器确定了实际的模板实参类型就称他实例化了函数模板的一个实
例。比如 的模板函数形式为 ,当调用这样的模板函数时类型 就会
被被调用时的类型所代替,比如其中 和 是 型,这时模板函数 中的形参 就会被 所代替,
模板函数就变为 。而当其中 和 是 类型时,模板函数会被替换为
,这样就实现了函数的实现与类型无关的代码。
、 注意:对于函数模板而言不存在 这样的调用,不能在函数调用的参数中指定模板形参的类型,对函数模板
的调用应使用实参推演来进行,即只能进行这样的调用,或者 。
二、类模板通式
1. 类模板的通用形式为: 形参名, 形参名… 类名,类模板和函数模板都是以
开始后接模板形参列表组成,模板形参不能为空,一但声明了类模板就可以用类模板的形参名声明类中的成员变量
和成员函数,即可以在类中使用内置类型的地方都可以使用模板形参名来声明。比如
在类 中声明了两个类型为 的成员变量 和 ,还声明了一个反回类型为 带两个类型
为 的函数 。
2. 类模板对象的创建:比有一个模板类,则使用类模板创建对象的方法为Aint m;在类 后面跟上一个尖括号
并在里面填上相应的类型,这样的话类 中凡是用到模板形参的地方都会被 所代替。当类模板有两个模板形参
时创建对象的方法为 类型之间用逗号隔开。
3、 对于类模板,模板形参的类型必须在类名后的尖括号中明确指定。比如 用这种方法把模板形参设置为
是错误的,类模板形参不存在实参推演的问题。也就是说不能把整型值 推演为 型传递给模板形参。要把类模板
形参调置为 型必须这样指定 。
4、 在类模板外部定义成员函数的方法为:template模板形参列表 函数反回类型 类名模板形参名:: 函数名(参数列
表){函数体},比如有两个模板形参T1,T2 的类A 中含有一个void h() 函数,则定义该函数的语法为:templateclass
T1,class T2 void AT1,T2::h(){}
显示全部