欢迎来到天天文库
浏览记录
ID:59208600
大小:294.00 KB
页数:45页
时间:2020-09-26
《第5章多态性和虚函数改全ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第5章多态性和虚函数5.1静态联编与动态联编5.2虚函数5.3成员函数中调用虚函数5.4构造函数和析构函数中调用虚函数5.5纯虚函数和抽象类5.6虚析构函数5.7应用实例5.1多态与联编1、多态polymorphism对象根据所接收的消息而做出动作,同样的消息为不同的对象接收时可导致完全不同的行动,该现象称为多态性。多态:单接口,多实现多态性实现:编译多态性,运行多态性2、联编对一个函数调用,要在编泽时或在运行时确定将其链接上相应的函数体的代码,这一过程称为函数联编。C++中有两种联编:静态联编和动态联编。5.1静态绑定和动态绑定3、静态联编与动态
2、联编静态联编:是指在编译程序时就根据调用函数提供的信息,就把调用函数名与它所对应的具体函数确定下来,绑定在一起。动态联编:是指在编译程序时还不能确定函数调用所对应的具体函数,只有在程序运行才把调用函数名与具体函数绑定在一起。4、多态性的实现编译时多态性:静态联编(连接)----通过函数重载和运算符重载实现的。运行时多态性:动态联编(连接)----通过继承和虚函数实现的。1.静态联编【例】分析程序运行结果,理解静态联编的含义。ConstdoublePi=3.14159classFigure//定义基类{public:Figure(){};double
3、area()const{return0.0;}};classCircle:publicFigure//定义派生类{public:Circle(doublemyr){R=myr;}doublearea()const{returnPI*R*R;}protected:doubleR;};classRectangle:publicFigure{public:Rectangle(doublemyl,doublemyw){L=myl;W=myw;}doublearea()const{returnL*W;}private:doubleL,W;};intmain(
4、){Figurefig;//基类Figure对象doublearea;area=Fig.area();cout<
5、函数调用中,将要使用哪些对象。这不仅具有局限性,有时也是不可能的。1.静态联编【例2】修改例1,分析程序运行结果来验证静态联编的问题。ConstdoublePi=3.14159classFigure//定义基类{public:Figure(){};doublearea()const{return0.0;}};classCircle:publicFigure//定义派生类{public:Circle(doublemyr){R=myr;}doublearea()const{returnPI*R*R;}protected:doubleR;};classR
6、ectangle:publicFigure{public:Rectangle(doublemyl,doublemyw){L=myl;W=myw;}doublearea()const{returnL*W;}private:doubleL,W;};voidfunc(Figure&p)//形参为例基类的引用{cout<
7、Areaofcircleis";func(c);Rectanglerec(4.0,5.0);//Rectangle派生类对象cout<<“return0;}AreaofisFigureis0Areaofcircleis0Areaofrectangleis05.1.2动态联编动态联编是指在程序运行时进行的联编。只有向具有多态性的函数传递一个实际对象时,该函数才能与多种可能的函数中的一种联系起来。在程序代码中要指明某个成员函数具有多态性要进行动态联编,用关键字virtual来标记,称为虚函数。优点:提供了更好的编程灵活性、问题抽象性和程序易维护性。缺点
8、:与静态联编相比,函数调用速度慢,这必须由代码本身在运行时刻推测调用哪个函数,然后再调用它。5.2虚函数5.2.1虚函数的
此文档下载收益归作者所有