面向对象编程技术第八章.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:47 大小:1MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

面向对象编程技术第八章.ppt

面向对象编程技术第八章.ppt

预览

免费试读已结束,剩余 37 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第八章多态问题的提出多态在本章的表现形式总结与建议去工作吧1.多态定义:不同类型的对象接收同样的消息产生不同的行为2.现实需要多态;面向对象需要多态:它以归整划一的方式在特定时刻处理多个类型不同的对象运算符重载虚函数抽象类-纯虚函数运算符重载运算符重载设计思想运算符重载分类重载分类之一重载为类成员函数格式:函数类型operator运算符(形参){......}重载分类之二重载分类之二重载举例1-用“+”、“-”能够实现复数的加减运算complexoperator+(complexc1,complexc2)//运算符重载友元函数实现{returncomplex(c2.real+c1.real,c2.imag+c1.imag);}complexcomplex::operator-(complexc1)//运算符重载成员函数实现{returncomplex(real-c1.real,imag-c1.imag);}voidcomplex::display(){cout<<"("<<real<<","<<imag<<")"<<endl;}voidmain()//主函数{complexc1(5,4),c2(2,10),c3;//声明复数类的对象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();}程序运行结果:c1=(5,4)c2=(2,10)c3=c1-c2=(3,-6)c3=c1+c2=(7,14)补充例子voidmain()//主函数{complexc1,c2,c3;//声明复数结构体变量c1.imag=1;c2.imag=2;c1.real=3;c2.real=4;c3=c1+c2;//使用重载运算符完成复数加法cout<<"c3=c1+c2"<<endl;cout<<"c3.image=:"<<c3.imag<<endl;cout<<"c3.real=:"<<c3.real<<endl;}执行结果:重载举例2-重载“++”、“--”voidClock::operator++()//前置单目运算符重载函数{Second++;if(Second>=60){Second=Second-60;Minute++;if(Minute>=60){Minute=Minute-60;Hour++;Hour=Hour%24;}}cout<<"++Clock:";}voidClock::operator++(int)//后置单目运算符重载{Second++;if(Second>=60){Second=Second-60;Minute++;if(Minute>=60){Minute=Minute-60;Hour++;Hour=Hour%24;}}cout<<"Clock++:";}//其它成员函数的实现略voidmain(){ClockmyClock(23,59,59);cout<<"Firsttimeoutput:";myClock.ShowTime();myClock++;myClock.ShowTime();++myClock;myClock.ShowTime();}程序运行结果为:Firsttimeoutput:23:59:59Clock++:0:0:0++Clock:0:0:1不可以重载C++中的运算符:.、.*、?:、::、sizeof只能重载C++语言中已有的运算符,不可臆造新的。不改变原运算符操作数个数、优先级和结合性。C++系统对重载运算符的选择,遵循函数重载的原则经重载的运算符,其操作数中至少应该有一个是自定义类型。运算符重载是对已有的运算符赋予多重含义虚函数虚函数的定义格式例1:classB1:publicB0//公有派生{public:voiddisplay(){cout<<"B1::display()"<<endl;}};classD1:publicB1//公有派生{public:voiddisplay(){cout<<"D1::display()"<<endl;}};voidfun(B0*ptr)//普通函数{ptr->display();}void