C语言程序设计课件第7章重载与模板.ppt





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

限制150内