第7章 多态性与虚函数.ppt

第7章 多态性与虚函数.ppt

ID:62163212

大小:130.50 KB

页数:35页

时间:2020-02-26

第7章  多态性与虚函数.ppt_第1页
第7章  多态性与虚函数.ppt_第2页
第7章  多态性与虚函数.ppt_第3页
第7章  多态性与虚函数.ppt_第4页
第7章  多态性与虚函数.ppt_第5页
资源描述:

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

1、第7章多态性与虚函数7.1多态性的概念7.2重载多态7.3虚函数多态7.4虚析构函数7.5纯虚函数与抽象类7.1多态性的概念多态性是指:具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性的:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。多态性(polymorphism)是面向对象程序设计的一个重要特征。利用多态性可以设计和实现一个易于扩展的系统。从系统实现的角度看,多态性分为两类:静态多态性:是通过函数的重载实现的(运算符重载实质上

2、也是函数重载)。动态多态性:是在程序运行过程中才动态地确定操作所针对的对象。它又称运行时的多态性。动态多态性是通过虚函数(virtualfunction)实现的。问题:当一个基类被继承为不同的派生类时,各派生类可以使用与基类成员相同的成员名,如果在运行时用同一个成员名调用类对象的成员,会调用哪个对象的成员?也就是说,通过继承而产生了相关的不同的派生类,与基类成员同名的成员在不同的派生类中有不同的含义。也可以说,多态性是“一个接口,多种方法”。重载多态:回顾前面的内容,其实已经接触过两种类型的多态。(1)函数重载就是多态一种形式(2)运算符重载也是多态的一种形式(前述Compl

3、ex对运算重载)函数重载属于静态多态——在编译的时候就能确定调用哪一个重载函数。7.2重载多态能否用同一个调用形式,既能调用派生类又能调用基类的同名函数???在程序中通过对象指针去调用不同派生层次中的同名函数,如,用同一个语句“ps->display();”可以调用不同派生层次中的display函数,只需在调用前给指针变量pt赋以不同的值(使之指向不同的类对象)即可。7.3虚函数7.3虚函数例题7_1:派生类中有两个display函数(继承一个、新增一个),,两个函数不属于重载,编译系统按照同名覆盖的原则决定调用的对象。程序中用std.display()调用的是派生类stud

4、ent中的成员函数area。如果想调用中的直接基类person的display函数,应当表示为:std1.person::display()。程序中对基类和派生类分别使用了ps->display(),具体执行那一个函数??发现:不管是ps指向基类对象还是派生类对象,其实调用的都是基类的display()函数。这不是我们想要的!!!7.3虚函数回顾:赋值兼容规则:一个公有派生类的对象在使用上可以被当作基类的对象,反之则禁止。具体表现在:派生类的对象可以被赋值给基类对象。派生类的对象可以初始化基类的引用。指向基类的指针也可以指向派生类。通过基类对象名、指针只能使用从基类继承的成员

5、希望:能够用同一种调用方式调用不同类中的同名函数-----用虚函数来解决这个问题对7_1例子修改将person类中的display函数声明为虚函数:virtualvoiddisplay(); 调试运行程序发现,达到我们期望的目标程序中基类和派生类的display就叫做虚函数。当把基类的某个成员函数声明为虚函数后,允许在派生类中重新定义、赋予其新功能,并且使用基类指针指向同一类族中的不同对象,从而调用其中的同名函数。7.3虚函数由虚函数实现的动态多态性就是:同一类族中不同类的对象,对同一函数调用作出不同的响应。虚函数的使用方法是:在基类用virtual声明成员函数为虚函数。这样

6、就可以在派生类中重新定义此函数,为它赋予新的功能,并能方便地被调用。在类外定义虚函数时,不必再加virtual。在派生类中重新定义此函数,要求函数名、函数类型、函数参数个数和类型全部与基类的虚函数相同,并根据派生类的需要重新定义函数体。7.3虚函数C++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。因此在派生类重新声明该虚函数时,可以加virtual,也可以不加,但习惯上一般在每一层声明该函数时都加virtual,使程序更加清晰。如果在派生类中没有对基类的虚函数重新定义,则派生类简单地继承其直接基类的虚函数。定义一个指向基类对象的指针变量,并使它

7、指向同一类族中需要调用该函数的对象。通过该指针变量调用此虚函数,此时调用的就是指针变量指向的对象的同名函数。7.3虚函数7.3虚函数静态关联与动态关联关联(Binding,也称绑定)程序自身彼此关联的过程,确定程序中的操作调用与执行该操作的代码间的关系。静态关联(StaticBindingorAarlyBinding)关联工作出现在编译阶段,用对象名或者类名来限定要调用的函数。动态绑定(DynamicBindingorLateBinding)关联工作在程序运行时执行,在程序运行时才确定将要调用的函数。7

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

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

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