第21次讲(运算符重载).doc

第21次讲(运算符重载).doc

ID:28763849

大小:43.50 KB

页数:12页

时间:2018-12-14

第21次讲(运算符重载).doc_第1页
第21次讲(运算符重载).doc_第2页
第21次讲(运算符重载).doc_第3页
第21次讲(运算符重载).doc_第4页
第21次讲(运算符重载).doc_第5页
资源描述:

《第21次讲(运算符重载).doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、第21讲教学内容8.1多态性概述8.1.1多态的类型8.1.2多态的实现8.2运算符重载8.2.1运算符重载的规则8.2.2运算符重载为成员函数8.2.3运算符重载为友元函数教学重点和难点1多态的理解2运算符重载的作用3运算符重载的两种形式,了解如何重新定义(重载)运算符以处理新的抽象数据类型教学方法:通过举现实生活中的例子,讲解多态的概念。通过程序举例演示,讲解运算符重载的作用,运算符重载的两种形式教学学时2学时教学过程一多态:1多态性是面向对象程序设计的重要特征之一。2多态性是指发出同样的消息被不同类型的对象接

2、收时有可能导致完全不同的行为。3多态的实现:–函数重载–运算符重载–虚函数二运算符重载:1运算符重载的实质1)如何将C++中的运算符和类对象结合一起使用,这个过程称为运算符重载(operatorvoerlonding)。C++允许程序员重载大多数运算符,使其更符合使用场景,编辑器根据运算符的使用方式生成合适的代码。虽然重载运算符的实现的也可以通过显示函数调用来完成,但是使用重载运算符可以使程序更清晰,针对同样的操作,使用运算符重载比使用显式函数调用更能提高程序的可读性。对于类对象的运算符必须重载,但赋值运算符(=)

3、无须显式重载就可以用语每个类,其默认行为是类数据成员的逐个赋值,但这种默认行为对带有指针成员的类是危险的,此时可以显式重载赋值运算符。2)运算符重载是对已有的运算符赋予多重含义3)必要性–C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类)4)实现机制–将指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参。编译系统对重载运算符的选择,遵循函数重载的选择原则。2运算符重载的规则和限制:1)可以重载C++中除下列运算符外的所有运算符:..*::?:2)只能重载C++

4、语言中已有的运算符,不可臆造新的。3)不改变原运算符的优先级和结合性。重载运算符应该模拟其内部对象的功能。例如:+运算符重载后,应该仍然执行加法运算,而不是减法运算。4)不能改变操作数个数。5)经重载的运算符,其操作数中至少应该有一个是自定义类型。(运算符重载不能改变该运算符用于内部类型对象时的作用方式)三运算符重载的两种形式:C++为其内部类型提供了丰富的运算符集,重载这些运算符的目的是为用户自定义的类型提供同样简洁的表达式,但运算符的重载不是自动完成的,程序员必须为所要执行的操作编写运算符函数,有时候把这些函数

5、用作成员函数,有时最好用作友元函数,在极少数情况下,他们可能既不是成员函数,也不是友元函数。1重载为成员函数:当运算符函数作为成员函数实现时,最左边的操作数必须是运算符类的一个类对象(或者是该类对象的一个引用)。例如重载运算符(),[],->或者任何赋值运算符时,运算符函数必须声明为类的一个成员函数。1)声明形式函数类型operator运算符(形参){}2)重载为类成员函数时参数个数=原操作数个数-1(后置++、--除外)3)•双目运算符B–如果要重载B为类成员函数,使之能够实现表达式oprd1Boprd2,其中o

6、prd1为A类对象,则B应被重载为A类的成员函数,形参类型应该是oprd2所属的类型。–经重载后,表达式oprd1Boprd2相当于oprd1.operatorB(oprd2)程序举例:#includeusingnamespacestd;classComplex{private:intreal;intimag;public:Complex(intr,inti){real=r;imag=i;}Complex(){}voiddisp(){cout<

7、l;}Complexoperator+(Complexc2)//将+重载为成员函数,//参数个数要少一个,因为另外一个参数用了this指针来实现{Complextemp;temp.real=real+c2.real;//this->realtemp.imag=imag+c2.imag;//this->imagreturntemp;}};voidmain(void){Complexc1(1,2);c1.disp();Complexc2(3,4);c2.disp();Complexc3;//c3=c1+c2;//c3=

8、c1.operator+(c2);//与上面c3=c1+c2等价,但上面的写法要简洁清晰些。//c3=10+c1;//错误!不能10.operator+(c1)//c3=c1+10;////错误!c1.operator+(10)c3.disp();}4)•前置单目运算符U–如果要重载U为类成员函数,使之能够实现表达式Uoprd,其中oprd为A类对象,则U应

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

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

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