重载与模板学习.pptx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《重载与模板学习.pptx》由会员分享,可在线阅读,更多相关《重载与模板学习.pptx(26页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、重载第1页/共26页7.1.17.1.1函数重载函数重载引入原因引入原因引入原因引入原因重重载载指指用用同同一一个个函函数数名名对对应应着着多多个个函函数数实实现现的的情情况。况。如:如:求求两两个个数数的的较较大大值值,若若数数的的类类型型不不同同,则则返返回回值值类型不同。类型不同。int max(int,int);int max(int,int);int max(int,int);int max(int,int);float c=max(3.14,3.5);/float c=max(3.14,3.5);/float c=max(3.14,3.5);/float c=max(3.14,3.
2、5);/errorerrorerrorerror因因此此一一个个定定义义了了实实现现整整型型数数比比较较功功能能的的函函数数无无法法用于实现实型数的比较,尽管其功能一致。用于实现实型数的比较,尽管其功能一致。这时就可采用重载。这时就可采用重载。第2页/共26页在C+中,允许两个或两个以上的函数采用相同的名字,只要使用不同类型、不同数目的参数或不同的返回值,编译器便知道在什么情况下该调用哪个函数,这就叫函数重载。如:int max(int x,int y)return(xy)?x:y);double max(double x,double y)return(xy)?x:y);#include v
3、oid main()coutmax(10,20)endl;coutmax(1.23,2.34)endl;重载方式重载方式靠将实参靠将实参的个数及的个数及类型和所类型和所被调用的被调用的f f()()函数的函数的形参的个形参的个数及类型数及类型一一一一比较比较来判断来判断。第3页/共26页()作作为为重重载载函函数数至至少少在在参参数数个个数数、参参数数类类型型上上有有所所不不同。若仅在返回类型上不同,编译器是无法区别的。同。若仅在返回类型上不同,编译器是无法区别的。如:如:void func(int);int func(int);/void func(int);int func(int);/错
4、误错误 int min(int,int);int min(int,int);int min(int,int,int);/int min(int,int,int);/正确正确 int add(int,int);int add(int,int);double add(double,double);/double add(double,double);/正确正确()typedeftypedef定定义义的的类类型型只只是是给给已已有有类类型型取取另另外外一一个个名名字,编译器不能将其同原类型区分。字,编译器不能将其同原类型区分。如:如:typedef INT int;typedef INT int;v
5、oid func(int x).void func(int x).void func(INT x)void func(INT x)(3 3)重重载载函函数数一一般般应应具具有有相相同同的的功功能能,否否则则会会破破坏坏程程序序的可读性。的可读性。注意事项注意事项第4页/共26页问题的提出1、基本数据类型系统提供了大量运算符。如:int x,y;x=x+y;表达简洁,使用方便。2、问题的提出:对于串类的对象合并:string x,y;strcat(x,y);不如上述运算那样简单,希望能改造为:x=x+y;更加简单和直观!因此,需要对“+”进行不同的解释,即:重载7.1.2 运算符重载运算符重载第
6、5页/共26页一、C+中的运算符1、大多数系统预定义运算符都能重载,除开以下:.:?:#*(当乘法运算符时可重载)“.”“:”“*”在C+中有特定定义 “?:”不值得重载 “#”不能被重载2、重载时的注意事项:(1)不能改变优先级;(2)不能改变结合性;(3)不能改变运算符所需操作数的个数;(4)重载后,可按这些运算符的表达方式使用。第6页/共26页一、通过运算符重载函数进行重载1、运算符重载函数是成员函数 语法形式:Type X:operator(参数表)/相对于该类而定义的操作 运算符重载的语法形式返回类型重载该运算符的类名要重载的运算符符号第7页/共26页2、运算符重载函数是友元函数 语
7、法形式:Type operator(参数表)/相对于该类而定义的操作 罗列运算符所需要的操作数3、实例、实例void operator+()void operator-()void counter:operator+()if(value0)value-;第8页/共26页注意:重载中注意的问题注意:重载中注意的问题1、运算符重载函数是友元函数、成员函数的区别;、运算符重载函数是友元函数、成员函数的区别;2、运算符被重载时,只是相对一特定类被重载,在特定的环、运算符被重载时,只是相对一特定类被重载,在特定的环境下作出特定的解释。当离开这个特定环境后,具有原来的境下作出特定的解释。当离开这个特定环境
8、后,具有原来的意义意义(系统定义系统定义);3、当重载运算符解释失败时,用该运算符的预定义版本、当重载运算符解释失败时,用该运算符的预定义版本(系统系统)进行解释;进行解释;4、用此方法重载时,只能对一个系统已有运算符进行特定环、用此方法重载时,只能对一个系统已有运算符进行特定环境下的新的解释,而不能创造新的运算符。当运算符不够用境下的新的解释,而不能创造新的运算符。当运算符不够用时,用函数调用来实现;时,用函数调用来实现;5、除、除“=”以外,重载的运算符可以被任何派生类所继承,以外,重载的运算符可以被任何派生类所继承,“=”需要每个类明确定义自己的解释;需要每个类明确定义自己的解释;6、重
9、载可能让程序的可读性下降,在使用时应模仿运算符的重载可能让程序的可读性下降,在使用时应模仿运算符的习惯用法习惯用法。第9页/共26页一、运算符重载函数定义的两种方式1、成员函数和友元函数2、差别的关键原因:this指针二、一元运算符1、不论前缀还是后缀,需要一个操作数2、对于任意一元运算符:(1)(1)成员函数重载运算符 定义 type x:operator type x:operator()()显式调用 objX.operator objX.operator()()隐式调用 objX objX 或:ojbXojbX(2)(2)友元函数重载运算符 定义 type operator type o
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 重载 模板 学习
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内