C++课件教学作者邱志杰第五章_多态性.ppt

C++课件教学作者邱志杰第五章_多态性.ppt

ID:51963596

大小:1.06 MB

页数:50页

时间:2020-03-26

C++课件教学作者邱志杰第五章_多态性.ppt_第1页
C++课件教学作者邱志杰第五章_多态性.ppt_第2页
C++课件教学作者邱志杰第五章_多态性.ppt_第3页
C++课件教学作者邱志杰第五章_多态性.ppt_第4页
C++课件教学作者邱志杰第五章_多态性.ppt_第5页
资源描述:

《C++课件教学作者邱志杰第五章_多态性.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第五章多态性丘志杰电子科技大学计算机学院2021/9/12多态性的分类编译时的多态运行时的多态函数重载运算符重载虚函数2021/9/13运算符重载的引入使用C++编写程序时,我们不仅要使用基本数据类型,还要设计新的数据类型—类类型。一般情况下,基本数据类型的运算都是用运算符来表达,这很直观,语义也简单。例如:inta,b,c;a=b+c;2021/9/14对于基本数据类型,就隐含着运算符重载的概念。inta,b,c;c=a+b;moveax,dwordptr[ebp-4]addeax,dwordptr[ebp-8]movdwordptr[eb

2、p-0Ch],eaxfloata,b,c;c=a+b;flddwordptr[ebp-4]fadddwordptr[ebp-8]fstpdwordptr[ebp-0Ch]2021/9/15需要一种机制来重新定义运算符作用在类类型上的含义。如果直接将运算符作用在类类型之上,情况又如何呢?例如:Counterret,c1,c2;ret=c1+c2;编译器将不能识别运算符的语义。这种机制就是运算符重载。2021/9/16例子:复数的加运算classComplex{doublere,im;public:Complex(doubler=0.0,doub

3、lei=0.0):re(r),im(i){}Complexadd(Complexc){Complext;t.re=re+c.re;t.im=im+c.im;returnt;}};voidmain(){Complexc1(1,2),c2(3,4);Complexc3=c1.add(c2);}“c3=c1.add(c2);”这种方式不直观我们更希望是如下方式:c3=c1+c2;2021/9/17例子:重载复数类的加运算符voidmain(){Complexc1(1,2),c2(3,4);Complexc3=c1+c2;}classComplex{

4、……public:Complexoperator+(Complexc){Complext;t.re=re+c.re;t.im=im+c.im;returnt;}};//相当于c3=c1.operator+(c2);称为operator+(…)函数的隐式调用称为operator+(…)函数的显示调用称operator+(…)为运算符重载函数将运算符重载为成员函数形式2021/9/18用成员函数重载运算符可能会碰到的麻烦classComplex{……public:Complexoperator+(Complexc){Complext;t.re=r

5、e+c.re;t.im=im+c.im;returnt;}};voidmain(){Complexc1(1,2);c1=c1+27;c1=27+c1;}//正确,相当于c1=c1.operator+(Complex(27))//错误,被理解为无意义的c1=27.operator+(c1)2021/9/19用友元函数形式实现运算符重载classComplex{……public:friendComplexoperator+(Complexc1,Complexc2);};Complexoperator+(Complexc1,Complexc2){C

6、omplext;t.re=c1.re+c2.re;t.im=c1.im+c2.im;returnt;}voidmain(){Complexc1(1,2);c1=c1+27;c1=27+c1;}//正确,相当于c1=operator+(Complex(27),c1)//正确,相当于c1=operator+(c1,Complex(27))请思考,能否同时存在以下两个函数:Complexoperator+(Complexc){…}friendComplexoperator+(Complexc1,Complexc2){…}将27隐式转换为Comple

7、x类型2021/9/110如果要显示复数对象,如何办?classComplex{……public:doublegetRe(){returnre;}doublegetIm(){returnim;}};intmain(){Complexobj(3,4);cout<

8、r<<(ostream&out,Complex&obj);};ostream&operator<<(ostream&out,Complex&obj){out<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。