欢迎来到天天文库
浏览记录
ID:59016615
大小:783.00 KB
页数:49页
时间:2020-09-26
《第7章_重载与模板ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第7章重载与模板1本章要点7.1重载7.2模板27.1重载重载所谓重载,就是重新赋予新的含义。具体的说就是方法名相同,参数个数或类型不同。C++中重载的类型函数重载运算符重载3函数重载概念函数重载是指用同一个函数名对应着多个函数实现的情况。例如:从2个数中找出其中的较大者。该2个数可以是整型、实型、字符型intmax1(inta,intb);doublemax2(doublea,doubleb,);charmax3(chara,charb);特点:类型不同,则函数名不同,适应性不强4函数重载举例函数重载函
2、数名相同,参数类型、参数个数或返回值不同,编译器自动实现对应函数的调用,这就叫函数重载。例:使用函数重载实现从2个数中找出其中的较大者intmax(intx,inty){return((x>y)?x:y);}doublemax(doublex,doubley){return((x>y)?x:y);}#includevoidmain(){cout<3、重载举例例如,函数f实现了重载:参数类型不同参数个数不同#includeusingnamespacestd;intf(inti){returni*i;}floatf(floatx,floaty){returnx*x+y*y;}doublef(doubled){returnd*d*d;}voidmain(){inta=2;floatb=3.0,c=4.0;doubled=5.0;cout<4、函数重载说明(1)作为重载函数至少在参数个数、参数类型上有所不同。若仅在返回类型上不同,编译器是无法区别的。如:voidfunc(int);intfunc(int);//错误intmin(int,int);intmin(int,int,int);//正确intadd(int,int);doubleadd(double,double);//正确(2)typedef定义的类型只是给已有类型取另外一个名字,编译器不能将其同原类型区分。如:typedefINTint;//指定用标识符int代表INT类型voidf5、unc(intx){...}voidfunc(INTx){…}//重复声明,func函数有相同的参数表(3)重载函数一般应具有相同的功能,否则会破坏程序的可读性inffun(inti);与intfun(intk)intfun(inti);与intfun(constinti)intfun(inti);与intfun(int&i)7运算符重载概念引例用“+”运算符完成两个实数、两个复数、两个字符串的运算。实数设有两个实数:c1=10,c2=20,则两个实数相加的结果是:c1+c2=10+20=30。复数设有两6、个复数:c1=10+10i,c2=20+20i,则两个复数相加的结果是:c1+c2=30+30i。字符串设有两个字符串:c1=“ABCD”,c2=“EFGH”则两个字符串相加的结果是:c1+c2=“ABCDEFGH”。分别用“+”运算符完成两个实数、复数相加,两个字符串的连接运算,得到完全不同的结果,就是“+”运算符的重载8运算符重载的方法运算符重载是对已有的运算符赋予多重含义。运算符重载有2种形式成员函数形式友元函数形式运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调7、用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。9运算符重载的方法每个运算符实际上是一个函数。例如,对于运算符“+”之所以既能实现实数相加,又能实现虚数相加,还能实现字符串连接,就是预先定义了一系列重载函数:doubleoperator+(double,double);//两个实数运算charoperator+(char,char););//两个字符串运算Complexoperator+(Complex&c););//两个复数运算函数operator+重8、载了运算符“+”10运算符重载的注意事项不能重载的运算符有5个:域运算符(::)条件运算符(?:)直接成员访问运算符(.)长度运算符sizeof解除对指向类成员的指针的引用运算符(.*)。重载规则:重载的运算符要保持原运算符的意义只能对已有的运算符重载,不能增加新的运算符重载的运算符不会改变原先的优先级和结合性=、()、[]、->、new、delete只允许用成员函数重载可以重载的运算符:+-*/%^&9、~!<<>><>==!
3、重载举例例如,函数f实现了重载:参数类型不同参数个数不同#includeusingnamespacestd;intf(inti){returni*i;}floatf(floatx,floaty){returnx*x+y*y;}doublef(doubled){returnd*d*d;}voidmain(){inta=2;floatb=3.0,c=4.0;doubled=5.0;cout<4、函数重载说明(1)作为重载函数至少在参数个数、参数类型上有所不同。若仅在返回类型上不同,编译器是无法区别的。如:voidfunc(int);intfunc(int);//错误intmin(int,int);intmin(int,int,int);//正确intadd(int,int);doubleadd(double,double);//正确(2)typedef定义的类型只是给已有类型取另外一个名字,编译器不能将其同原类型区分。如:typedefINTint;//指定用标识符int代表INT类型voidf5、unc(intx){...}voidfunc(INTx){…}//重复声明,func函数有相同的参数表(3)重载函数一般应具有相同的功能,否则会破坏程序的可读性inffun(inti);与intfun(intk)intfun(inti);与intfun(constinti)intfun(inti);与intfun(int&i)7运算符重载概念引例用“+”运算符完成两个实数、两个复数、两个字符串的运算。实数设有两个实数:c1=10,c2=20,则两个实数相加的结果是:c1+c2=10+20=30。复数设有两6、个复数:c1=10+10i,c2=20+20i,则两个复数相加的结果是:c1+c2=30+30i。字符串设有两个字符串:c1=“ABCD”,c2=“EFGH”则两个字符串相加的结果是:c1+c2=“ABCDEFGH”。分别用“+”运算符完成两个实数、复数相加,两个字符串的连接运算,得到完全不同的结果,就是“+”运算符的重载8运算符重载的方法运算符重载是对已有的运算符赋予多重含义。运算符重载有2种形式成员函数形式友元函数形式运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调7、用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。9运算符重载的方法每个运算符实际上是一个函数。例如,对于运算符“+”之所以既能实现实数相加,又能实现虚数相加,还能实现字符串连接,就是预先定义了一系列重载函数:doubleoperator+(double,double);//两个实数运算charoperator+(char,char););//两个字符串运算Complexoperator+(Complex&c););//两个复数运算函数operator+重8、载了运算符“+”10运算符重载的注意事项不能重载的运算符有5个:域运算符(::)条件运算符(?:)直接成员访问运算符(.)长度运算符sizeof解除对指向类成员的指针的引用运算符(.*)。重载规则:重载的运算符要保持原运算符的意义只能对已有的运算符重载,不能增加新的运算符重载的运算符不会改变原先的优先级和结合性=、()、[]、->、new、delete只允许用成员函数重载可以重载的运算符:+-*/%^&9、~!<<>><>==!
4、函数重载说明(1)作为重载函数至少在参数个数、参数类型上有所不同。若仅在返回类型上不同,编译器是无法区别的。如:voidfunc(int);intfunc(int);//错误intmin(int,int);intmin(int,int,int);//正确intadd(int,int);doubleadd(double,double);//正确(2)typedef定义的类型只是给已有类型取另外一个名字,编译器不能将其同原类型区分。如:typedefINTint;//指定用标识符int代表INT类型voidf
5、unc(intx){...}voidfunc(INTx){…}//重复声明,func函数有相同的参数表(3)重载函数一般应具有相同的功能,否则会破坏程序的可读性inffun(inti);与intfun(intk)intfun(inti);与intfun(constinti)intfun(inti);与intfun(int&i)7运算符重载概念引例用“+”运算符完成两个实数、两个复数、两个字符串的运算。实数设有两个实数:c1=10,c2=20,则两个实数相加的结果是:c1+c2=10+20=30。复数设有两
6、个复数:c1=10+10i,c2=20+20i,则两个复数相加的结果是:c1+c2=30+30i。字符串设有两个字符串:c1=“ABCD”,c2=“EFGH”则两个字符串相加的结果是:c1+c2=“ABCDEFGH”。分别用“+”运算符完成两个实数、复数相加,两个字符串的连接运算,得到完全不同的结果,就是“+”运算符的重载8运算符重载的方法运算符重载是对已有的运算符赋予多重含义。运算符重载有2种形式成员函数形式友元函数形式运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调
7、用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。9运算符重载的方法每个运算符实际上是一个函数。例如,对于运算符“+”之所以既能实现实数相加,又能实现虚数相加,还能实现字符串连接,就是预先定义了一系列重载函数:doubleoperator+(double,double);//两个实数运算charoperator+(char,char););//两个字符串运算Complexoperator+(Complex&c););//两个复数运算函数operator+重
8、载了运算符“+”10运算符重载的注意事项不能重载的运算符有5个:域运算符(::)条件运算符(?:)直接成员访问运算符(.)长度运算符sizeof解除对指向类成员的指针的引用运算符(.*)。重载规则:重载的运算符要保持原运算符的意义只能对已有的运算符重载,不能增加新的运算符重载的运算符不会改变原先的优先级和结合性=、()、[]、->、new、delete只允许用成员函数重载可以重载的运算符:+-*/%^&
9、~!<<>><>==!
此文档下载收益归作者所有