第6章多态性和虚函数

第6章多态性和虚函数

ID:44961185

大小:68.00 KB

页数:30页

时间:2019-11-06

第6章多态性和虚函数_第1页
第6章多态性和虚函数_第2页
第6章多态性和虚函数_第3页
第6章多态性和虚函数_第4页
第6章多态性和虚函数_第5页
资源描述:

《第6章多态性和虚函数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第6章多态性和虚函数6.1多态性多态性、封装性和继承性构成了面向对象程序设计的三大特性。多态性是指发出同样的消息被不同类型的对象接收时导致完全不同的行为。即对应相同的函数名,却执行了不同的函数体。这种把函数名与其具体的实现代码相联系的过程,称为联编。按照联编进行的阶段的不同,可以分为静态联编和动态联编。这两种联编过程分别对应着多态的两种实现方式:编译时多态、运行时多态。6.1.1编译时多态←静态联编静态联编是在程序开始运行之前进行。在编译、连接过程中,系统就可以根据类型匹配等特征确定某一个同名标识到底是要调用哪一段程序代码。编译时多态通过函

2、数重载实现。函数重载的两种方式:①在同一类中重载:同名的成员函数,根据参数个数、类型不同,自动予以区别。②基类成员函数在派生类中的重载。静态联编有时会出现一些意想不到的结果,请看下面的例子。#includeclassPoint{public:Point(doublei,doublej){x=i;y=j;}doubleArea()const{return0.0;}private:doublex,y;};classRectangle:publicPoint{public:Rectangle(doublei,doublej

3、,doublek,doublel);doubleArea()const{returnw*h;}private:doublew,h;};Rectangle::Rectangle(doublei,doublej,doublek,doublel):Point(i,j){w=k;h=l;}voidmain(){Rectanglerec(3.0,5.2,15.0,25.0);Point*prtP=&rec;//声明基类指针,并将基类指针指向派生类对象prtP->Area();}该程序的运行结果为:0输出结果表明基类指针ptrP指向派生类对象,然而此时

4、ptrP->Area()调用的是基类的Area()函数,因为通过基类指针只能取得派生类中从基类继承的数据与函数。6.1.2运行时多态←动态联编从上例中可以看出,静态联编时,通过基类指针只能取得派生类中从基类继承的数据与函数。如果我们需要通过基类的指针得到派生类对象中成员函数的调用,能够实现吗?答案是肯定的,通过虚函数可以达到这个目的,从而实现程序的运行时多态6.2虚函数虚函数是动态联编的基础。虚函数是成员函数,而且是非static的成员函数。6.2.1虚函数virtual类型说明符函数名(参数表)其中,被关键字virtual说明的函数称为虚

5、函数。如果某类中的一个成员函数被说明为虚函数,这就意味着该成员函数在派生类中可能有不同的实现。通过基类指针可以访问派生类对象成员函数。【例6-2】通过基类指针可以访问派生类对象成员函数#includeclassPoint{public:Point(doublei,doublej){x=i;y=j;}virtualdoubleArea()const{return0.0;}private:doublex,y;};classRectangle:publicPoint{public:Rectangle(doublei,dou

6、blej,doublek,doublel);//doubleArea()const{returnw*h;}virtualdoubleArea()const{returnw*h;}private:doublew,h;};Rectangle::Rectangle(doublei,doublej,doublek,doublel):Point(i,j){w=k;h=l;}voidfun(Point&s){cout<

7、;}程序运行结果:375.0通过这个例子可以看到,派生类中对基类的虚函数进行替换时,要求派生类中说明的虚函数与基类中的被替换的虚函数之间满足如下条件:1与基类的虚函数有相同的名称。2与基类的虚函数有相同的参数个数及相同的对应参数类型。3与基类的虚函数有相同的返回值。如果从名称、参数及返回值三个方面检查之后,派生类的函数满足了上述条件,就被自动确定为虚函数,可以不必加virtual显式说明。派生类中对基类的虚函数进行替换时,要求派生类中说明的虚函数与基类中的被替换的虚函数之间满足如下条件:1与基类的虚函数有相同的名称。2与基类的虚函数有相同的

8、参数个数及相同的对应参数类型。3与基类的虚函数有相同的返回值。如果从名称、参数及返回值三个方面检查之后,派生类的函数满足了上述条件,就被自动确定为虚函数,可以不必加virtual

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

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

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