第08章_多态性.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第08章_多态性.ppt》由会员分享,可在线阅读,更多相关《第08章_多态性.ppt(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第八章第八章 多态性多态性本章主要内容本章主要内容l多态性多态性l运算符重载运算符重载l虚函数虚函数l纯虚函数纯虚函数l抽象类抽象类第八章第八章 多态性多态性多态性的概念多态性的概念 多态性是面向对象程序设计的重要特征之一。多态多态性是面向对象程序设计的重要特征之一。多态性是指发出性是指发出同样的消息同样的消息被被不同类型的对象不同类型的对象接收时有可能接收时有可能导致导致完全不同的行为完全不同的行为。多态的实现:。多态的实现:p252l函数重载函数重载l运算符重载运算符重载l虚函数虚函数第八章第八章 多态性多态性8.1 运算符重载运算符重载 运算符重载是使同一个运算符作用于不同类型的数运算符
2、重载是使同一个运算符作用于不同类型的数据时具有不同的行为。例如,我们声明了一个点类据时具有不同的行为。例如,我们声明了一个点类point和它的对象和它的对象point p1(1,1),p2(3,3),并并希望能希望能使用使用“+”运算符实现表达式运算符实现表达式“p1+p2”,就,就需要重载需要重载“+”运运算符。算符。运算符重载是实质上将运算对象转化为运算函数的运算符重载是实质上将运算对象转化为运算函数的实参,并根据实参的类型来确定重载的运算函数实参,并根据实参的类型来确定重载的运算函数。第八章第八章 多态性多态性1.只能重载只能重载C+中已有的运算符,不能臆造新的运算符;中已有的运算符,不
3、能臆造新的运算符;2.类属关系运算符类属关系运算符“.”、作用域分辨符、作用域分辨符“:”、成员指针运算、成员指针运算符符“*”、sizeof运算符和三目运算符运算符和三目运算符“?:?:”不能重载。不能重载。3.重载之后运算符的优先级和结合性都不能改变,单目运算符重载之后运算符的优先级和结合性都不能改变,单目运算符只能重载为单目运算符,双目运算符只能重载为双目运算符。只能重载为单目运算符,双目运算符只能重载为双目运算符。4.运算符重载后的功能应当与原有功能相类似。运算符重载后的功能应当与原有功能相类似。5.重载运算符含义必须清楚,不能有二义性。重载运算符含义必须清楚,不能有二义性。运算符的重
4、载形式有两种:运算符的重载形式有两种:(1)重载为类的成员重载为类的成员函数函数;(2)重载为类的友元重载为类的友元函数函数。8.1.1 运算符重载的规则运算符重载的规则第八章第八章 多态性多态性运算符运算符重载重载为类的为类的友元函数友元函数的一般语法形式为:的一般语法形式为:friend operator (形参表形参表)函数体;函数体;其中:其中:(1)函数类型:重载运算符的返回值类型,即运算结果函数类型:重载运算符的返回值类型,即运算结果 类型;类型;(2)operator:定义运算符重载函数的定义运算符重载函数的关键字关键字。(3)运算符:要重载的运算符名称。运算符:要重载的运算符名
5、称。(4)形参表:给出对象和类型。形参表:给出对象和类型。(5)friend:运算符重载为友元函数时的关键字。运算符重载为友元函数时的关键字。第八章第八章 多态性多态性1双目运算:双目运算:oprd1 B oprd2 把把B重载为重载为oprd1所属类的成员函数,只有一个形所属类的成员函数,只有一个形参,形参的类型是参,形参的类型是oprd2所属类所属类。例如,经过重载之后,。例如,经过重载之后,表达式表达式oprd1+oprd2就相当于函数调用就相当于函数调用oprd1.operator+(oprd2)。2单目运算单目运算1)前置单目运算:前置单目运算:U oprd 把把U重载为重载为opr
6、d所属类的成员函数,没有形参。所属类的成员函数,没有形参。例如,例如,“+”重载的语法形式为:重载的语法形式为:operator +();+oprd 就就相当于函数调用相当于函数调用oprd.operator +();8.1.2 运算符重载为成员函数运算符重载为成员函数第八章第八章 多态性多态性2)后置单目运算后置单目运算 oprd V 运算符运算符V重载为重载为oprd所属类的成员函数,带有一所属类的成员函数,带有一个整型个整型(int)形参。例如,后置单目运算符形参。例如,后置单目运算符“-”重载的重载的语语法形式为:法形式为:operator-(int);oprd-就相当于函数调用就相当
7、于函数调用oprd.operator-(0);第八章第八章 多态性多态性/EX8_1.cpp:演示重载二维点演示重载二维点point的的“+”、“-”运算符运算符#include class point private:float x,y;public:point(float xx=0,float yy=0)x=xx;y=yy;float get_x()return x;float get_y()return y;point operator+(point p1);/重载运算符重载运算符“+”point operator-(point p1);/和和“-”为成员函数为成员函数;第八章第八章 多
8、态性多态性point point:operator+(point q)return point(x+q.x,y+q.y);point point:operator-(point q)return point(x-q.x,y-q.y);void main()point p1(3,3),p2(2,2),p3,p4;/声明声明point类的对象类的对象 p3=p1+p2;/两点相加两点相加 p4=p1-p2;/两点相减两点相减 coutp1+p2:x=p3.get_x(),y=p3.get_y()endl;coutp1-p2:x=p4.get_x(),y=p4.get_y()endl;第八章第八章
9、多态性多态性 可以看出,除了在函数声明及实现的时候使用了可以看出,除了在函数声明及实现的时候使用了关键字关键字operator之外,运算符重载成员函数与类的普之外,运算符重载成员函数与类的普通成员函数没有什么区别。在使用的时候,可以直接通成员函数没有什么区别。在使用的时候,可以直接通过运算符、操作数的方式来完成函数调用。通过运算符、操作数的方式来完成函数调用。程序运行结果为:程序运行结果为:p1+p2:x=5,y=5p1-p2:x=1,y=1第八章第八章 多态性多态性例例 时钟类时钟类运算符前置运算符前置+和后置和后置+重载为时钟类的成员函数。重载为时钟类的成员函数。前置单目运算符,重载函数没
10、有形参,对于后置单目运前置单目运算符,重载函数没有形参,对于后置单目运算符,重载函数需要有一个整型形参。算符,重载函数需要有一个整型形参。操作数是时钟类的对象。操作数是时钟类的对象。实现时间增加实现时间增加1秒钟。秒钟。运算符重载第八章第八章 多态性多态性/8_2.cpp#includeusing namespace std;class Clock/时钟类声明时钟类声明 public:/外部接口外部接口 Clock(int NewH=0,int NewM=0,int NewS=0);void ShowTime();Clock&operator+();/前置单目运算符重前置单目运算符重载载 Cl
11、ock operator+(int);/后置单目运算符重后置单目运算符重载载 private:/私有数据成员私有数据成员 int Hour,Minute,Second;第八章第八章 多态性多态性Clock&Clock:operator+()/前置单目运算符重载函数前置单目运算符重载函数 Second+;if(Second=60)Second=Second-60;Minute+;if(Minute=60)Minute=Minute-60;Hour+;Hour=Hour%24;return*this;13第八章第八章 多态性多态性Clock:Clock(int NewH,int NewM,int
12、NewS)if(0=NewH&NewH24&0=NewM&NewM60&0=NewS&NewS60)Hour=NewH;Minute=NewM;Second=NewS;else coutTime error!endl;void Clock:ShowTime()coutHour:Minute:Secondendl;第八章第八章 多态性多态性Clock Clock:operator+(int)/后置单目运算符重载后置单目运算符重载/注意形参表中的整型参数注意形参表中的整型参数 Clock old=*this;+(*this);return old;void main()Clock myClock(
13、23,59,59);coutFirst time output:;myClock.ShowTime();coutShow myClock+:;(myClock+).ShowTime();coutShow+myClock:;(+myClock).ShowTime();15第八章第八章 多态性多态性1.双目运算:oprd1 B oprd2 双目运算符双目运算符B重载为重载为oprd1所属类的友元函数,该类的友元函数,该函数有两个形参,表达式函数有两个形参,表达式oprd1 B oprd2就相当于函数就相当于函数调用调用operator B(oprd1,oprd2)。2单目运算1)前置单目运算前置单
14、目运算U oprd 前置前置单目运算符单目运算符U重载为重载为oprd所属类的友元函数,所属类的友元函数,表达式表达式U oprd相当于函数调用相当于函数调用operator U(oprd)。2)后置单目运算后置单目运算oprd V 后置单目运算符后置单目运算符V重载为重载为oprd所属类的友元函数,所属类的友元函数,表达式表达式oprd V相当于函数调用相当于函数调用operator V(oprd,int)。8.1.3 运算符重载为友元函数运算符重载为友元函数第八章第八章 多态性多态性/EX8_2.cpp:/演示使用运算符重载为友元函数的方法重做两点加减法运算演示使用运算符重载为友元函数的方
15、法重做两点加减法运算#include class point private:float x,y;public:point(float xx=0,float yy=0)x=xx;y=yy;float get_x()return x;float get_y()return y;friend point operator+(point p1,point p2);/重载重载“+”和和 friend point operator-(point p1,point p2);/“-”为友元为友元函数函数;第八章第八章 多态性多态性point operator+(point p1,point p2)retur
16、n point(p1.x+p2.x,p1.y+p2.y);point operator-(point p1,point p2)return point(p1.x-p2.x,p1.y-p2.y);void main()point p1(3,3),p2(2,2),p3,p4;/声明声明point类的对象类的对象 p3=p1+p2;/两点相加两点相加 p4=p1-p2;/两点相减两点相减 coutp1+p2:x=p3.get_x(),=p3.get_y()endl;coutp1-p2:x=p4.get_x(),=p4.get_y()endl;程序运行结果:程序运行结果:p1+p2:x=5,y=5 p
17、1-p2:x=1,y=1第八章第八章 多态性多态性1比较运算符重载例如,例如,、=、=和和!=。2赋值运算符重载 例如,例如,=、+=、-=、*=和和/=。这些运算符的重载比较简单。这些运算符的重载比较简单。8.1.4 其他运算符重载其他运算符重载第八章第八章 多态性多态性/EX8_3.cpp:演示比较运算符和赋值运算符重载的程序演示比较运算符和赋值运算符重载的程序#include class point private:float x,y;public:point(float xx=0,float yy=0)x=xx;y=yy;point(point&);point()bool operat
18、or=(point);bool operator!=(point);point operator+=(point);point operator-=(point);float get_x()return x;float get_y()return y;第八章第八章 多态性多态性point:point(point&p)x=p.x;y=p.y;bool point:operator=(point p)if(x=p.get_x()&y=p.get_y()return 1;else return 0;bool point:operator!=(point p)if(x!=p.get_x()&y!=p.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 08 多态性
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内