欢迎来到天天文库
浏览记录
ID:49020166
大小:384.00 KB
页数:42页
时间:2020-01-29
《C++运算符重载.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第7章运算符重载1本章学习要求:运算符重载的必要性运算符重载的两种方式特殊运算符的重载27.1运算符重载概述运算符也可以重载,即一个名字的运算符可以代表不同的运算操作。。例如,程序中可以利用“+”对整数、单精度、双精度以及指针进行加法运算等,如:inta=3+7;//对整数加doubled=4.9+8.58;//对双精度加intar[10];int*p=ar;p=p+1;//对指针加由于整数和浮点数在内存中的存储格式不同,计算机对整数、浮点数的加运算的处理过程是不同的,而指针变量加1更不是简单的把地址值加1。但是,由于C
2、++编译器已经对运算符“+”进行了重载,编译器能根据表达式中“+”号两边操作数的类型来决定做什么操作,所以“+”就能够适用于整数、单精度、双精度以及指针等的运算。3现在,若有一个自定义的复数类Complex,有两个复数对象c1=(6+3i),c2=(3.4-0.9i),能否直接使用“+”进行两个复数对象相加,即有如下表达式呢?c1+c2答案是:可以.但程序员必须对+进行重载。47.2重载运算符的实现重载的运算符函数语法为:<返回值类型>operator#(<形参列表>){<相关操作>}operator为关键字,专门用于定
3、义重载的运算符函数,#代表要被重载的运算符。如:Complexoperator+(constComplex&a,constComplex&b){......}该函数可以用来是是实现对两个Complex对象的加,5C++中,重载运算符可以采用两种方式实现:①将重载的运算符函数作为自定义类的成员函数;②将运算符函数作为全局函数,即,不作为任何类的成员。但是,若运算符函数需要访问操作数对象的私有成员,则必须将运算符函数声明成操作数对象类型的友元。因此,常常将这种方式称为全局(友元)函数形式。67.2.1作为成员函数重载运算符作
4、为成员函数重载时,运算符函数内的参数个数一般比运算符操作数个数少一个。因为,对于类的非静态成员函数,第一个参数默认为指向该类对象的this指针(例外:++,--作为后置时,有一个参数)。1.双目运算符重载作为非static成员函数重载双目运算符时,只需要给出运算符右边操作数,左操作数为隐含的this指针,其函数原型声明为:<返回值类型>operator#(<类型>);函数定义形式为:<返回值类型>[<类名::>]operator#(<类型><参数>){<相关操作>}#为被重载的运算符,“<类型><参数>”用来描述运算符右
5、边的操作数,运算符重载函数的定义可以放在类体内也可以同其他成员函数一样放到类体外。7例使用成员函数来重载Complex的+、-运算符。#includeusingnamespacestd;classComplex{private:doublerpart,ipart;public:Complex(){rpart=ipart=0.0;}Complex(doublerp,doubleip){rpart=rp;ipart=ip;}Complexoperator+(constComplex&c){Complext
6、emp(rpart+c.rpart,ipart+c.ipart);returntemp;}Complexoperator-(constComplex&c);voidprint_complex(){cout<<"("<7、{Complexa(10,7),b(3,5);Complexc=a+b;Complexd=a-b;Complexe=a+b-d;cout<<"c=";c.print_complex();cout<<"d=";d.print_complex();cout<<"e=";e.print_complex();intx=100,y=200,z;z=x+y;cout<<"z="<8、单目运算符,一般不需要参数(后置++,--除外),运算符的左操作数由函数隐含this指针提供,即运算符的前置用法。函数的声明语法为:<返回值类型>operator#();9例7.4在例7.3功能基础上,为类Complex提供取负(“-”)的操作。#includeusingnamespacestd;
7、{Complexa(10,7),b(3,5);Complexc=a+b;Complexd=a-b;Complexe=a+b-d;cout<<"c=";c.print_complex();cout<<"d=";d.print_complex();cout<<"e=";e.print_complex();intx=100,y=200,z;z=x+y;cout<<"z="<8、单目运算符,一般不需要参数(后置++,--除外),运算符的左操作数由函数隐含this指针提供,即运算符的前置用法。函数的声明语法为:<返回值类型>operator#();9例7.4在例7.3功能基础上,为类Complex提供取负(“-”)的操作。#includeusingnamespacestd;
8、单目运算符,一般不需要参数(后置++,--除外),运算符的左操作数由函数隐含this指针提供,即运算符的前置用法。函数的声明语法为:<返回值类型>operator#();9例7.4在例7.3功能基础上,为类Complex提供取负(“-”)的操作。#includeusingnamespacestd;
此文档下载收益归作者所有