- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第12章 模板 本讲内容提要 函数模板 函数模板 模板函数 模板实参的省略 类模板 类模板的概念与定义 模板类 类模板的继承与派生 请看下面的函数: 一、函数模板 函数模板是通过对参数类型进行参数化后,获取有相同形式的函数体。 它是一个通用函数,它可适应一定范围内的不同类型对象的操作。 函数模板将代表着不同类型的一组函数,它们都使用相同的代码,这样可以实现代码重用,避免重复劳动,又可增强程序的安全性。 1.函数模板 利用函数模板解决上述问题。 add模板可以定义为: 其中,“ ”括起部分就是模板的形参表,T是一个虚拟类型参数。注意,可以用多个虚拟参数构成模板形参表。 不但普通函数可以声明为函数模板,类的成员函数也可以声明为函数模板。 2.模板函数 函数模板是模板函数的一个样板,它可以生成多个重载的模板函数,这些模板函数重用函数体代码。 模板函数是函数模板的一个实例。 函数模板的实例化(instantiation) 例12.1: 问题:分析程序输出结果。 3.模板实参的省略 模板实参的省略是有条件的。 以下四种情况模板实参不能省略: 从模板函数实参表获得的信息有矛盾。 需要获得特定类型的返回值,而不管参数的类型如何。 虚拟类型参数没有出现在模板函数的形参表中。 函数模板含有常规形参。 从模板函数实参表获得的信息有矛盾。 例如: templatetypename T T add(T a,T b){return a+b;} 若调用函数的语句为:coutadd(3,5); 则编译系统无论是从3还是5所获得的信息都是T对应于int,因此可顺利地生成如下模板函数:int add(int a, int b){return a+b;} 调用语句变为: coutaddint(3.0,5); 其中,紧跟在函数名后的int就是模板实参表,此时,编译系统生成如下的模板函数: int add(int a,int b){return a+b;} 需要获得特定类型的返回值,而不管参数的类型如何。 例如, 如果需要add返回一个int型的值, 那么直接以addint(a,b);形式调用即可。 虚拟类型参数没有出现在模板函数的形参表中。 由于虚拟类型参数没有出现在模板函数的形参表中,所以调用时不可能从模板函数的实参表中获得相应的信息,因此无法省略。 例12.2 分析程序输出结果。 函数模板含有常规形参。 当函数模板含有常规形参时,如果常规参数的信息无法从模板函数的实参表中获得,则在调用时必须显式的给出对应于常规参数的模板实参。 例12.3 分析程序输出结果。 二、类模板 1.为何要引进类模板? 按不同的方式重用相同的代码 使代码参数化(通用化),即不受类型和操作的影响 使用类模板所定义的一种类类型,类中的某些数据成员和某些成员函数的参数及返回值可以选取一定范围内的多种类型,从而实现代码重用。 是一种参数化类型的类,是类的生成器。 讨论引进类模板的必要性 有如下程序:Node是链表的节点类,List为链表类。 class Node {……}; class List{ public:List(); ~List(); void Add(Node ); void Remove(Node ); Node *Find(Node ); …… }; //该类的实现部分略…… 通用化修改,使用参数T class List{ public:List(); ~List(); void Add(T ); void Remove(T ); Node *Find(T ); …… }; //该类的实现部分略…… 2.类模板 (1)类模板的定义 template模板参数表 class 类名 {类体说明}; //类体实现 模板参数表 class 标识符 例如,array.h文件中类模板的定义 (2)用类模板定义对象的格式是: 类名模板实参表对象名(构造函数实参表); 3. 模板类 模板类 在定义了类模板后,可根据需要生成相应的模板类。即,对模板参数,指定具体的类型。 例如,当指定AType 为int型时,生成模板类 array int 利用模板类创建对象格式如下: array int a1=10; 例12.4: 问题:分析程序输出结果。 4.类模板的继承与派生 模板类的派生与普通类一样,也分为公有派生类、保护派生类和私有派生类三种。 模板派生类中成员的访问控制规则与普通类也是一样的。 下面给出常见的几种情况: 普通类继承类模板 模板类继承普通类 模板类继承模板类 模板类继承模板参数给出的基类 普通类继承类模板 可以通过继承类模板的一个实例来声明一个类 ,例如: 模板类继承普通类 模板类TDerived继承了普通类TBase,这种情况十分常见。
您可能关注的文档
- 谈空间思维力的培养.doc
- shell程1.ppt
- C语言程序计_08章 函数.ppt
- 第8章 流控制语句.ppt
- 大学计算机成原理 第2章 运算方法和运算器3.ppt
- 大学vb考题库.doc
- 逻辑代数及简.ppt
- Linux作系统实用教程07.ppt
- 1、MATAB概述与运算基础.ppt
- 第一讲Mahematica基础.ppt
- 2024年体重秤投资申请报告代可行性研究报告.docx
- 河南省洛阳市2024-2025学年高二上学期期中考试数学试卷(解析版).docx
- 河南省洛阳市2024-2025学年高一下学期期中考试数学试卷(解析版).docx
- 2024年人体器件复合材料投资申请报告代可行性研究报告.docx
- 2024年粉末涂料项目项目投资申请报告代可行性研究报告.docx
- 2024年大宗商品项目项目投资筹措计划书代可行性研究报告.docx
- 2024年通用手工具项目项目投资申请报告代可行性研究报告.docx
- 儿童口腔健康护理PPT模板牙齿保健口腔卫生爱牙日主题班会课件46.pptx
- 河南省南阳市2024-2025学年高二上学期11月期中质量评估数学试题(解析版).docx
- 2024年清洁服务项目项目投资需求报告代可行性研究报告.docx
文档评论(0)