- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4.重载模板函数.ppt
清华大学出版社 钱 能 讲师:王磊 思考角度 C++程序是一些类型和函数,编程就是设计类型和函数,然后按C++的程序结构来组织 模板编程 世界上万事万物都具有相似性,许多类型和函数尽管处理的数据不同,但其行为也具有相似性,将相似的类型归为类型族以及相似的函数归为函数族的编程,就是模板编程 编程方法的侧重点 面向对象编程解决类体系中的不同对象行为表现 模板编程解决独立类之间的不同对象行为表现 多个独立类可以是多个类继承体系,因而,面向对象编程与模板编程是融合的. 第二十章内容 模板的概念 为什么要用模板 函数模板 重载模板函数 类模板的定义 使用类模板 1.模板的概念 模板(Template)是根据参数类型生成函数和类的机制,是C++最强大的特征之一,通过使用模板,可以设计一个类来处理多种类型的数据,而不必为每一种类分别创建类。这样的好处是使程序更加简洁,更有效率。 模板是一种参数化的通用类或通用函数。从软件工程的角度来讲,模板是一种重要的软件复用技术。 C++程序都是由类和函数组成,所以模板可以分为类模板和函数模板。 下面从一个简单的模板开始: 分析: 该示例定义了三个函数,分别比较整型、浮点型和字符型,这里运用了重载技术,若还想增加其他数据类型,就必须也为它重载一个函数 2.为什么要用模板 考察两个swap()函数,一个交换两个整型数,另一个交换 两个浮点数,两个swap()函数的主体行为是一样的,一个 是处理int型的,一个是处理float型的。 void swap(inta,intb){ int temp=a; a=b; b=temp; } Swap(floata,floatb) { float temp=a; a=b; b=temp; } 交换任何一对类类型对象,可以定义如下: Void swap(TA,TB) { Ttemp=a; a=b; b=temp } 每交换一对新类型的对象,都要定义一个执行同样操作的重载函数, 当有了函数模板之后,重载就不必要了。 对于Cat类的链表 Class cat { //…} Class catlist {Public: List(); Void Add(Cat); Void Remove(Cat) Cat*Find(Cat); ~list(); Private://… }; 该链表将cat类对象作为链表结点,进行插入。删除和查找处理。 如果让类模板来工作,就不必重复对链表进行定义,减少劳动强度。 3. 函数模板 理想的函数重载是针对不同的参函数模板可以将函数参数和返回值的类型全部或部分地参数化,提供一个与类型无关的算法,其定义方法是: template 模板参数表 返回类型 函数名 ( 函数参数表) { 函数体 } 其中,template是关键字,模板参数表用一对尖括号括起来,内有一个或多个模板参数,不能为空。模板参数有两种,一是模板类型参数,代表一种参数化的数据类型,由关键字class或typename和标识符组成;二是模板非类型参数,它的声明格式和常规的参数声明格式相同,代表一个常量,或者一个常量表达式。而形如: void swap(Type a, Type b){ Type t=a; a=b; b=t; } 的重载函数系所定义的行为序列却相同.这种形式的重载意义不大. templatetypename T void swap(T a, T b) { T t=a; a=b; b=t; } 定义函数模板来表示重载函数系: 模板形参 函数模板名 数据形参 函数模板定义体 templatetypename T void swap(T a, T b){ T t=a; a=b; b=t; } int fn(){ int ix=6, iy=7, ia=3, ib=5; swap(ix, iy); //产生函数定义体 swap(ia, ib); //不产生函数定义体 //... } 函数模板用法:以函数模板名作调用的函数名,以数据实参作参数传递 4.重载模板函数 函数模板和普通函数一样,能够利用模板参数列表中模板参数的区别,构造一个函数模板的重载集。 需要注意的是,并不是所有被成功定义的重载函数模板都能够被成功调用,在调用时可能会发生二义性错误,也就是说,对于一个函数调用可能会有多个函数模板被实例化。所以,在定义重载函数时,必须确保
原创力文档


文档评论(0)