欢迎来到天天文库
浏览记录
ID:52110309
大小:464.00 KB
页数:66页
时间:2020-03-31
《《运算符重载new》PPT课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第10章运算符重载10.1什么是运算符重载10.2运算符重载的方法10.3重载运算符的规则10.4运算符重载函数作为类成员函数和友元函数10.5重载双目运算符10.6重载单目运算符10.7重载流插入运算符和流提取运算符10.8不同类型数据间的转换10.1什么是运算符重载运算符重载的实质运算符重载是对已有的运算符赋予多重含义必要性实现机制C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类)将指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参。编译系统对重载运算符的
2、选择,遵循函数重载的选择原则。例:用“+”号进行两个复数的相加。在C++中不能在程序中直接用运算符“+”对复数进行相加运算。用户必须自己设法实现复数相加。例10.1通过函数来实现复数相加。#includeusingnamespacestd;classComplex{public:Complex(){real=0;imag=0;}Complex(doubler,doublei){real=r;imag=i;}Complexcomplex_add(Complex&c2);//声明复数相加函数void
3、display();private:doublereal;//实部doubleimag;//虚部};ComplexComplex∷complex_add(Complex&c2){Complexc;c.real=real+c2.real;c.imag=imag+c2.imag;returnc;}voidComplex∷display(){cout<<″(″<4、_add(c2);//调用复数相加函数cout<<″c1=″;c1.display();cout<<″c2=″;c2.display();cout<<″c1+c2=″;c3.display();return0;}运行结果如下:c1=(3+4i)c2=(5-10i)c1+c2=(8,-6i)能否直接用加号“+”来实现复数运算呢?如:c3=c1+c2;声明形式函数类型operator运算符(形参){......}重载为类成员函数时参数个数=原操作数个数-1(后置++、--除外)重载为友元函数时参数个数=原操作数个数,且5、至少应该有一个自定义类型的形参。10.2运算符重载的方法例如,想将“+”用于Complex类(复数)的加法运算,函数的原型为:Complexoperator+(Complex&c1,Complex&c2);在定义了重载运算符的函数后,可以说:函数operator+重载了运算符+。为了说明在运算符重载后,执行表达式就是调用函数的过程,可以把两个整数相加也想像为调用下面的函数:intoperator+(inta,intb){return(a+b);}如果有表达式5+8,就调用此函数,将5和8作为调用函数时的实参,函数的6、返回值为13。这就是用函数的方法理解运算符。例10.2改写例10.1,重载运算符“+”,使之能用于两个复数相加。#includeusingnamespacestd;classComplex{public:Complex(){real=0;imag=0;}Complex(doubler,doublei){real=r;imag=i;}Complexoperator+(Complex&c2);//声明重载运算符的函数voiddisplay();private:doublereal;doubleima7、g;};operator+取代了complex_addComplexComplex∷operator+(Complex&c2){Complexc;c.real=real+c2.real;c.imag=imag+c2.imag;returnc;}voidComplex∷display(){cout<<″(″<8、splay();cout<<″c2=″;c2.display();cout<<″c1+c2=″;c3.display();return0;}c3=c1.complex_add(c2);c1+c2解释为:c1.operator+(c2)运行结果:c1=(3+4i)c2=(5-10i)c1+c2=(8,-6i)隐含this指针运算符重载函数operator+还可
4、_add(c2);//调用复数相加函数cout<<″c1=″;c1.display();cout<<″c2=″;c2.display();cout<<″c1+c2=″;c3.display();return0;}运行结果如下:c1=(3+4i)c2=(5-10i)c1+c2=(8,-6i)能否直接用加号“+”来实现复数运算呢?如:c3=c1+c2;声明形式函数类型operator运算符(形参){......}重载为类成员函数时参数个数=原操作数个数-1(后置++、--除外)重载为友元函数时参数个数=原操作数个数,且
5、至少应该有一个自定义类型的形参。10.2运算符重载的方法例如,想将“+”用于Complex类(复数)的加法运算,函数的原型为:Complexoperator+(Complex&c1,Complex&c2);在定义了重载运算符的函数后,可以说:函数operator+重载了运算符+。为了说明在运算符重载后,执行表达式就是调用函数的过程,可以把两个整数相加也想像为调用下面的函数:intoperator+(inta,intb){return(a+b);}如果有表达式5+8,就调用此函数,将5和8作为调用函数时的实参,函数的
6、返回值为13。这就是用函数的方法理解运算符。例10.2改写例10.1,重载运算符“+”,使之能用于两个复数相加。#includeusingnamespacestd;classComplex{public:Complex(){real=0;imag=0;}Complex(doubler,doublei){real=r;imag=i;}Complexoperator+(Complex&c2);//声明重载运算符的函数voiddisplay();private:doublereal;doubleima
7、g;};operator+取代了complex_addComplexComplex∷operator+(Complex&c2){Complexc;c.real=real+c2.real;c.imag=imag+c2.imag;returnc;}voidComplex∷display(){cout<<″(″<8、splay();cout<<″c2=″;c2.display();cout<<″c1+c2=″;c3.display();return0;}c3=c1.complex_add(c2);c1+c2解释为:c1.operator+(c2)运行结果:c1=(3+4i)c2=(5-10i)c1+c2=(8,-6i)隐含this指针运算符重载函数operator+还可
8、splay();cout<<″c2=″;c2.display();cout<<″c1+c2=″;c3.display();return0;}c3=c1.complex_add(c2);c1+c2解释为:c1.operator+(c2)运行结果:c1=(3+4i)c2=(5-10i)c1+c2=(8,-6i)隐含this指针运算符重载函数operator+还可
此文档下载收益归作者所有