嵌入式Linux下C++程序设计--07多态,运算符重载,虚函数,抽象类

上传人:沈*** 文档编号:253054466 上传时间:2024-11-28 格式:PPT 页数:34 大小:1.06MB
收藏 版权申诉 举报 下载
嵌入式Linux下C++程序设计--07多态,运算符重载,虚函数,抽象类_第1页
第1页 / 共34页
嵌入式Linux下C++程序设计--07多态,运算符重载,虚函数,抽象类_第2页
第2页 / 共34页
嵌入式Linux下C++程序设计--07多态,运算符重载,虚函数,抽象类_第3页
第3页 / 共34页
资源描述:

《嵌入式Linux下C++程序设计--07多态,运算符重载,虚函数,抽象类》由会员分享,可在线阅读,更多相关《嵌入式Linux下C++程序设计--07多态,运算符重载,虚函数,抽象类(34页珍藏版)》请在装配图网上搜索。

1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,中程在线信息产业培训网,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,

2、第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,嵌入式,Linux,下,QT,程序设

3、计,主讲:成宝宗,本章主要内容,多态性,运算符重载,虚函数,纯虚函数,抽象类,3,多态性的概念,多态性是面向对象程序设计的重要特征之一。,多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为。,多态的实现:,函数重载:相同函数名,不同函数参数。,运算符重载:对原有运算符增加其他功能。,虚函数:用于动态绑定,根据参数类型不同,自动调用对应函数。,4,运算符重载,运算符重载是对已有的运算符赋予多重含义,必要性,C+,中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类),实现机制,将指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参。

4、,编译系统对重载运算符的选择,遵循函数重载的选择原则。,5,规则和限制,可以重载,C+,中除下列运算符外的所有运算符:,.*:?:,只能重载,C+,语言中已有的运算符,不可臆造新的。,不改变原运算符的优先级和结合性。,不能改变操作数个数。,经重载的运算符,其操作数中至少应该有一个是自定义类型。,6,两种形式,重载为类的非静态成员函数,重载为非成员函数,7,运算符函数,声明形式,函数类型,operator,运算符(形参),.,重载为类成员函数时,参数个数,=,原操作数个数,-1,(后置,+,、,-,除外),重载为非成员函数时,参数个数,=,原操作数个数,,且至少应该有一个自定义类型的形参。,8,

5、运算符成员函数的设计,双目运算符,B,如果要重载,B,为类成员函数,使之能够实现表达式,oprd1 B oprd2,,其中,oprd1,为,A,类对象,则,B,应被重载为,A,类的成员函数,形参类型应该是,oprd2,所属的类型。,经重载后,表达式,oprd1 B oprd2,相当于,oprd1.operator B(oprd2),9,运算符重载,将,“,+,”,、,“,-,”,运算重载为复数类的成员函数。,规则,:,实部和虚部分别相加减。,操作数,:,两个操作数都是复数类的对象。,#include,using namespace std;,class Complex/,复数类定义,publi

6、c:/,外部接口,Complex(double,r=0.0,double i=0.0):,real(r,),imag(i,)/,构造函数,Complex operator+(const Complex/,运算符,+,重载成员函数,Complex operator-(const Complex/,运算符,-,重载成员函数,void display()const;/,输出复数,private:/,私有数据成员,double real;/,复数实部,double,imag,;/,复数虚部,;Complex,Complex:operator,+(const Complex&c2)const/,重载运算

7、符函数实现,return,Complex(real,+c2.real,imag,+c2.imag);/,创建一个临时无名对象作为返回值,Complex,Complex:operator,-(const Complex&c2)const/,重载运算符函数实现,return,Complex(real,-c2.real,imag,-c2.imag);/,创建一个临时无名对象作为返回值,void,Complex:display,()const,cout,(real ,imag,),endl,;,int,main()/,主函数,Complex c1(5,4),c2(2,10),c3;/,定义复数类的对象

8、,cout,c1=;c1.display();,cout,c2=;c2.display();,c3=c1-c2;/,使用重载运算符完成复数减法,cout,c3=c1-c2=;c3.display();,c3=c1+c2;/,使用重载运算符完成复数加法,cout,c3=c1+c2=;c3.display();,return 0;,程序输出的结果为:,c1=(5,4),c2=(2,10),c3=c1-c2=(3,-6),c3=c1+c2=(7,14),11,#include,using namespace std;,class Point,private:,int,x;,int,y;,public

9、:,Point(int,a=0,int,b=0):x(a),y(b),friend Point,operator+(Point,&,p,Point,/,友元函数,Point operator-(Point/,成员函数,void,show()cout,(x=x,y=y),endl,;,;,Point,operator+(Point,&,p,Point,&q),return,Point(p.x+q.x,p.y+q.y,);,;,Point,Point:operator,-(Point&p),return,Point(x-p.x,y-p.y,);,int,main(int,argc,char*,ar

10、gv,),Point a(4,5);,Point b(10,20);,Point c;,Point d;,d=a-b;,c=,a+b,;,a.show,();,b.show,();,c.show,();,d.show,();,13,运算符成员函数的设计,前置单目运算符,U,如果要重载,U,为类成员函数,使之能够实现表达式,U,oprd,,其中,oprd,为,A,类对象,则,U,应被重载为,A,类的成员函数,无形参。,经重载后,表达式,U,oprd,相当于,oprd.operator,U(),14,运算符成员函数的设计,后置单目运算符,+,和,-,如果要重载,+,或,-,为类成员函数,使之能够实

11、现表达式,oprd,+,或,oprd,-,,其中,oprd,为,A,类对象,则,+,或,-,应被重载为,A,类的成员函数,且具有一个,int,类型,形参,。,经重载后,表达式,oprd,+,相当于,oprd.operator,+(0),15,运算符重载,运算符前置,+,和后置,+,重载为时钟类的成员函数。,前置单目运算符,重载函数没有形参,对于后置单目运算符,重载函数需要有一个整型形参。,操作数是时钟类的对象。,实现时间增加,1,秒钟。,#include,using namespace std;,class Clock/,时钟类声明定义,public:/,外部接口,Clock(int,hour

12、=0,int,minute=0,int,second=0);,void,showTime,()const;,Clock/,前置单目运算符重载,Clock operator+(,int,);/,后置单目运算符重载,private:/,私有数据成员,int,hour,minute,second;,;,/,前置单目运算符重载函数,Clock&,Clock:operator,+(),second+;,if(second=60),second-=60;,minute+;,if(minute=60),minute-=60;,hour=(hour+1)%24;,return*this;,/,后置单目运算符重

13、载,Clock,Clock:operator,+(,int,),/,注意形参表中的整型参数,Clock old=*this;,+(*this);/,调用前置“,+”,运算符,return old;,/,其它成员函数的实现略,int,main(),Clock myClock(23,59,59);,cout,First time output:;,myClock.showTime,();,cout,Show,myClock,+:;,(,myClock+).showTime,();,cout,Show+,myClock,:;,(+,myClock).showTime,();,return 0;,程序

14、运行结果为:,First time output:23:59:59,Show,myClock,+:23:59:59,Show+,myClock,:0:0:1,18,运算符非成员函数的设计,函数的形参代表依自左至右次序排列的各操作数。,后置单目运算符,+,和,-,的重载函数,形参列表中要增加一个,int,,但不必写形参名。,如果在运算符的重载函数中需要操作某类对象的私有成员,可以将此函数声明为该类的友元。,19,运算符非成员函数的设计,双目运算符,B,重载后,表达式,oprd1 B oprd2,等同于,operator B(oprd1,oprd2),前置单目运算符,B,重载后,,表达式,B,op

15、rd,等同于,operator,B(oprd,),后置单目运算符,+,和,-,重载后,,表达式,oprd,B,等同于,operator B(oprd,0),20,例,8-3,将,+,、,-,(双目)重载为非成员函数,,并将其声明为复数类的友元,两个操作数都是复数类的常引用。,将,(双目)重载为非成员函数,并将其声明为复数类的友元,它的左操作数是,std:ostream,引用,右操作数为复数类的常引用,返回,std:ostream,引用,用以支持下面形式的输出:,cout,a b;,该输出调用的是:,operator (operator (,cout,a),b);,#include,using

16、namespace std;,class Complex/,复数类定义,public:/,外部接口,Complex(double,r=0.0,double i=0.0):,real(r,),imag(i,)/,构造函数,friend Complex operator+(const Complex/,运算符,+,重载,friend Complex operator-(const Complex/,运算符,-,重载,friend,ostream,&operator (,ostream,/,运算符,重载,private:/,私有数据成员,double real;/,复数实部,double,imag,;/,复数虚部,;,Complex operator+(const Complex&c1,const Complex&c2),return Complex(c1.real+c2.real,c1.imag+c2.imag);,Complex operator-(const Complex&c1,const Complex&c2),return Complex(c1.real-c2.real,c1.i

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!