面向对象程序设计语言C++ - 第9章 模板.pptVIP

面向对象程序设计语言C++ - 第9章 模板.ppt

  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文档。上传文档
查看更多
第九章 模板 9.2 模板的概念 9.2.1函数模板与模板函数 2.重载模板函数 有些特殊情况需要函数模板参与重载,C++允许函数模板被一个或多个同名的非模板函数重载。考虑下面的例子: void fun(int num, char cha) { max(num, num ); max(cha, cha); max(num, cha); // 错误,max(int, char) 无法匹配 max(cha, num); // 错误,max(int, char) 无法匹配 } * 第九章 模板 9.1 类属的概念 类属(genericity)首先由 ALGOL 68 引入,是 Ada 语言的典型成分。关于Ada的类属,我们只考虑它的一种最重要的形式,即类型参数化;它表现了使用一个或多个类型去参数化一个软件元素(如 Ada 中的程序包或函数)的能力。类属又可分为无约束类属机制和约束类属机制,其中无约束类属机制是指对类属参数没有施加任何特殊的要求,而约束类属机制则意味着类属参数需要一定的辅助条件。 * 第九章 模板 9.1 类属的概念 9.1.1无约束类属机制 考虑一个函数,它用来交换两个变量的值。使用非静态强类型语言,可编写出如下函数(用类 Ada 的语法形式): procedure swap(x,y) is t : local; begin t := x; x := y; y := t; end swap; 这里,被交换的元素 x 和 y 的类型以及局部变量 t 的类型都不需要指定,这显得很自由,可能会导致错误。如果 a 是整型变量,b 是字符串,swap(a,b)显然引起错误,而编译程序却无法检查。 * 第九章 模板 9.1 类属的概念 9.1.1无约束类属机制 考虑一个函数,它用来交换两个变量的值。使用非静态强类型语言,可编写出如下函数(用类 Ada 的语法形式): procedure swap(x,y) is t : local; begin t := x; x := y; y := t; end swap; 这里,被交换的元素 x 和 y 的类型以及局部变量 t 的类型都不需要指定,这显得很自由,可能会导致错误。如果 a 是整型变量,b 是字符串,swap(a,b)显然引起错误,而编译程序却无法检查。 * 第九章 模板 9.1 类属的概念 9.1.1无约束类属机制 为了解决这一问题,像Pascal这样的静态强类型语言需要程序员明确地定义所有变量和形参的类型。迫使函数调用时进行实参与形参之间的强类型检查,以避免产生类型不兼容的错误。这就产生了不愉快的后果,在缺少重载机制支持的情况下,要为每种类型的交换操作声明一个新的过程:int_swap,str_swap, float_swap,……。 * 第九章 模板 9.1 类属的概念 9.1.1无约束类属机制 相比之下,含类属机制的这类语言提供了一种折衷的办法,它既不像非类型语言那样太多的自由,也不像Pascal那样的强类型语言施加太多的约束。一个类属化的swap可以用类 Ada 语言声明为 generic type T is private; procedure swap(x,y: in out T) is t : T;5 begin t:=x; x:=y; y:=t; end swap; * 第九章 模板 9.1 类属的概念 9.1.1无约束类属机制 语句 generic 引入了一个类型参数T,也称类属参数T,swap的两个形参x、y和局部变量t都具有T的类型,这样,只要类属参数T实例化为某一具体类型,例如integer类型或者string类型,swap函数都能正确工作。 swap表示一个函数模板,或称类属函数,它代表的是一类函数实际的函数是将T实例化而获得的。 procedure int_swap is new swap (integer); procedure str_swap is new swap (string); * 第九章 模板 9.1 类属的概念 9.1.1无约束类属机制 语句 generic 引入了一个类型参数T,也称类属参数T,swap的两个形参x、y和局部变量t都具有T的类型,这样,只要类属参数T实例化为某一具体类型,例如integer类型或者string类型,swap函数都能正确工作。 swap表示一个函数模板,或称类属函数,它代表的是一类函数实际的函数是将T实例化而获得的。 procedure int_swap is new swap (integer); procedure str_swap is new swap (string); * 第九

您可能关注的文档

文档评论(0)

132****9295 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档