《面向对象程序设计》讲义13

《面向对象程序设计》讲义13

ID:25199142

大小:427.00 KB

页数:38页

时间:2018-11-17

《面向对象程序设计》讲义13_第1页
《面向对象程序设计》讲义13_第2页
《面向对象程序设计》讲义13_第3页
《面向对象程序设计》讲义13_第4页
《面向对象程序设计》讲义13_第5页
资源描述:

《《面向对象程序设计》讲义13》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、《面向对象程序设计》讲义版权所有,1997(c)DaleCarnegie&Associates,Inc.第12章12.1多态性在C++中的体现所谓多态性就是当不同对象收到相同的消息时产生不同的动作。12.1.1编译时的多态性1.在一个类中说明的重载2.基类成员函数在派生类中重载12.1.2运行时的多态性先看下面的例子:第12章多态性与虚函数#include#includeclasspoint{protected:intx,y;public:point(intx,inty){point::x=x;point::y=y;}

2、virtualvoidshow()//定义虚函数{putpixel(x,y,getcolor());}};classcircles:publicpoint{intradius;public:circles(intx,inty,intradius):point(x,y){circles::radius=radius;}voidshow(){circles(x,y,radius);}};main(){pointp1(10,10);circlesc1(100,100,50);setcolor(14);point*ptr;//定义指向基类的指针ptr=&p1;//指针

3、指向基类对象p1ptr->show();//调用p1对象的show()ptr=&c1;//指针指向对象c1ptr->show();//调用c1对象的show()}12.2虚函数12.2.1对象指针1.一般对象的指针语法与指向一般变量的指针相同。2.引入派生类后的对象指针任何被说明为指向基类的指针都可以指向它的公有派生类。使用派生类对象指针时应注意的问题:(1)可以用一个声明让指向基类对象的指针指向它的公有派生的对象。禁止指向私有派生的对象。(2)不能将一个声明为指向派生类对象的指针指向其基类的一个对象。(3)声明为指向基类对象的指针,当其指向派生类对象时,只能

4、利用它来直接访问派生类中从基类继承来的成员,不能访问公有派生类中特定的成员。12.2.2为什么要引入虚函数#includeclassbase{public:voidwho(){cout<<“thisistheclassofbase!”;}classderive1:publicbase{public:voidwho(){cout<<“thisistheclassofderive1!”;}};classderive2:publicbase{public:voidwho(){cout<<“thisistheclassofderive2

5、!”;}};main(){baseobj1,*p;derive1obj2;derive2obj3;p=&obj1;p->who();p=&obj2;p->who();p=&obj3;p->who();obj2.who();obj3.who();}运行结果:thisistheclassofbase!thisistheclassofbase!thisistheclassofbase!thisistheclassofderive1!thisistheclassofderive2!从结果可以看出,通过指针引起的普通成员函数调用,仅仅与指针的类型有关,而与此刻正指向

6、什么对象无关。12.2.3虚函数的定义及使用1.虚函数的定义#includeclassbase{//...public:virtualvoidwho()//定义虚函数{cout<<“base!”;}};classfrist:publicbase{//...public:voidwho()//重新定义虚函数{cout<<“thefirstderivation”;}};classsecond:publicbase{//...public:voidwho()//重新定义虚函数{cout<<“thesecondderivation”

7、;}};main(){baseobj1,*ptr;firstobj2;secondobj3;ptr=&obj1;ptr->who();//调用base类的who()版本ptr=&obj2;ptr->who();//调用first类的who()版本ptr=&obj3;ptr->who();//调用second类的who()版本}运行结果:basethefirstderivationthesecondderivation2.虚函数与重载函数的关系3.多继承中的虚函数#includeclassa{public:virtualvoidf()//

8、定义f()为虚函数{cout<<“cl

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

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

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