- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
函数和(模板)
在函数模板中允许使用多个类型参数。但在template定义部分的每个模板形参前必须有关键字class。 类模板和模板类 一个类模板(也称为类属类或类生成类)允许用户为类定义一种模子,使得实例化类中的某些数据成员,某些成员函数的参数或者返回值,能取任意数据类型。 定义一个类模板,其格式如下: templateclass Type class 类名 { //… }; 关键字class (或typename)后面的Type是类型参数。在实例化类定义中,欲采用通用数据类型的数据成员,成员函数的参数或返回值,前面需要加上Type。 例 类模板stack的例子,在此建立了字符型和整型两个堆栈。 #includeiostream.h const int size=10; templateclass Type // 声明一个类模板 class stack{ // 定义类模板 Type stck[size]; // 数组可取任意类型,即模板参数类型Type Int top; public: void init() { top=0; } void push(Type ch); // 参数取Type类型 Type pop(); // 返回类型取Type类型 }; 说明: (1) 在每个类模板定义之前,都需要在前面加上模板声明 templateclass Type 类模板在使用时,必须在名字后面缀上模板参数Type stackType (2) 模板类可以有多个模板参数,在下面的例中建立了使用两个模板参数的类模板。 例 使用两个模板参数的类模板 #includeiostream.h templateclass T1,class T2 //声明具有两个参数的模板 class myclass{ //定义类模板 T1 i; T2 j; public: myclass(T1 a,T2 b) { i=a; j=b; } void show() { cout”I=”i” j=”jendl; } }; void main() { myclass int, doubleod1(12,0.15); myclass char, char *ob2(‘x’, ”This is a test”); od1.show(); ob2.show(); } 程序运行结果如下: I=12 j=0.15 I=x j=This is a test 北京大学《程序设计实习》课程 《程序设计实习》课程 (C++ Programming Practice) C++模板 提纲 概论 模板机制的介绍 模板引子 1. 假如设计一个求两参数最大值的函数,在实践中我们可能需要定义四个函数: int max ( int a , int b ) { return ( a b ) ? a , b ; } long max ( long a , long b ) { return ( a b ) ? a , b ;} double max ( double a , double b ) { return ( a b)? a , b ; } char max ( char a , char b ) { return ( a b ) ? a , b ;} 2. 这些函数几乎相同,唯一的区别就是形参类型不同。 3. 需要事先知道有哪些类型会使用这些函数,对于未知类型这些函数不起作用。 模板的概念 所谓模板是一种使用无类型参数来产生一系列函数或类的机制。 若一个程序的功能是对某种特定的数据类型进行处理,则可以将所处理的数据类型说明为参数,以便在其他数据类型的情况下使用,这就是模板的由来。 模板是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。 通过模板可以产生类或函数的集合,使它们操作不同的数据类型,从而避免需要为每一种数据类型产生一个单独的类或函数。 模板分类 模板分为函数模板(模子)和类模板(模子),允许用户分别用它们构造(套印)出(模板)函数和(模板)类。 图显示了模板(函数模板和类模板),模板函数,模板类和对象
文档评论(0)