13.面向象程序设计.pptVIP

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
模 板 考虑:返回两个参数中较大者的函数 max(x,y)。x,y是具有可比较次序的任何类型。但是,C++是强类型语言,它要求参数x,y的类型在编译时就声明。这样就需要max( )函数的许多版本,每个版本的算法相同,形参代表的数据类型不相同。 int max(int x,int y); long max(long x,long y); …….等等 针对这种情况,采用函数模板,只需对函数模板编写一次,然后基于调用函数时提供的参数类型,C++编译器将自动产生相应的函数来正确处理该类型的数据。 函数模板的定义形式是: templateclass T或templatetypename T 类型名 函数名(参数表) { 函数体的定义 } 模板头以关键字template开始,后面跟尖括号中的一个或多个模板形式参数。模板参数可以是类型,也可以是非类型的数据。 1 类型参数:特殊的表示法“class T”或“typename T”表示T是一个类型参数,它可以给定任何类型作为值。在标准C++中关键字“class”和“typename”可以交换。 2 非类型参数:正常格式的参数。例:int k 这里生成了两个模板函数max(i,0)和max(a,b) max(i,0)用模板实参int将类型参数T实例化,而max(a,b)将T实例化为类类型Myclass。注意编译器将根据上下文关系非常仔细地调用适当的“”,根据运算符重载,在Myclass类声明中,应提供一个重载的operator( )函数。 一个函数模板提供一类函数的抽象,它以任意类型T为参数。由一个函数模板产生的函数称为模板函数,它是函数模板的具体实例。(类似于类与对象的关系) 重载函数模板 在一些特殊情况下,可能需要函数模板参与重载,C++允许函数模板被一个或多个同名的非模板函数重载。 templateclass T T max(T a,T b) { return (ab)?a:b; } void f(int i,char c ) { max(i,c); } //错误!max(int,char)无法匹配 问题在于模板类型并不知道int和char之间可以进行隐式类型转换。为了解决这个问题,C++允许函数模板可以参与重载 例如: templateclass T T max(T a,T b) { return(ab)?a:b;} int max(int,int); //显式声明函数max(int,int) void f(int a,int b,char c1,char c2 ) { max(a,b); // ?? max(c1,c2); // ?? max(a,c1); // ?? } 注意:重载模板函数的规则,可能会引起许多不必要的函数定义的产生,一个好的实现应该是充分利用这个功能来简单性的抑制不合逻辑的回答。 类模板与模板类 一个类模板允许用户为类定义一种模式,使得类中的某些数据成员和函数成员的参数以及返回值能取任意类型。 类是对一组对象的公共性质的抽象,而类模板则是对不同类的公共性质的抽象,因此类模板是属于更高层次的抽象。 类模板声明的语法形式是: template模板参数表 class 类名 {类成员声明} 在类模板外定义其成员函数,则采用以下形式: template模板参数表 类型名 类名模板参数表::函数名(参数) 应该注意到:类模板的成员函数必须是函数模板。 例如:templateclass T class vector{ T *data; int size; public: vector(int); ~vector( ){delete[]data;} T opeator[ ](int i){return data[i];} } templateclass T vectorT::vector(int k) { data=new T[k]; size=k; } 注意:考虑new是否重载 vectorT是该类模板的名字,用模板实参生成的类称为模板类。 例如:vectorint是一个模板类 下面的程

文档评论(0)

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

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

1亿VIP精品文档

相关文档