欢迎来到天天文库
浏览记录
ID:50516825
大小:640.00 KB
页数:34页
时间:2020-03-10
《面向对象程序设计语言C++第2版 教学课件 作者 陈文宇面向对象程序设计语言C++ - 第7章 虚函数和多态性.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、面向对象程序设计语言C++电子科技大学示范性软件学院1第七章虚函数和多态性现实生活中,经常出现这种情况:面对同样的消息,不同的人,面对同样的消息,产生不同的反应。面向对象语言是解决现实世界问题的,也需要对这种实际情况进行处理。C++程序设计语言使用多态性实现同一个消息,不同接收者采取不同的响应方式的这种现象。顾名思义,多态性是一个事务有多种形态。在面向对象语言中,一般这样描述多态:向不同对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。2第七章虚函数和
2、多态性C++语言的多态性有两种类型:静态多态性和动态多态性。前面学习的函数重载和运算符重载就是静态多态性的具体示例。在程序编译时系统就能够决定调用哪个函数,因此静态多态性又称为编译时的多态性。动态多态性时程序运行过程中才动态的确定操作所针对的对象。它又称为运行时的多态性。动态多态性是通过虚函数实现的。3第七章虚函数和多态性7.1虚函数7.1.1静态多态性对于普通成员函数的重载,可表达为下面的方式:(1)在同一个类中重载;(2)在不同类中重载;(3)基类的成员函数在派生类中重载;因此,重载函数的访问是在编译时区分的,这种
3、程序运行之前就能够在多个函数中确定当前访问的函数的方法称为静态多态性。4第七章虚函数和多态性7.1虚函数7.1.1静态多态性有以下三种区分方法:据参数的特征加以区分,例如:Show(int,char)与Show(char*,float)使用”::”加以区分,例如:Circle::Show有别于Point::Show根据类对象加以区分ACircle.Show()调用Circle::Show()5第七章虚函数和多态性7.1虚函数7.1.1静态多态性子类可以重载父类的成员:classA{public:voidfun(){co
4、ut<<"InA"<5、un()Bref.B::fun();//调用B::fun()A*Apointer=&Cobj;Apointer->fun();//调用A::fun()7第七章虚函数和多态性7.1虚函数7.1.2基类和派生类的指针与对象的关系(1)可以用一个指向基类的指针指向其公有派生类的对象。这时,基类指针访问的是派生对象的拥有的基类部分,派生类自身的部分不能被基类指针访问。但是用指向派生类的指针指向一个基类的对象是不正确的,因为派生类指针可以访问派生类公有成员,但基类对象没有派生类自身成员,因此用派生类指针指向基类对象时,如果访问派6、生类公有成员,而该成员实际不存在,所以不能用指向派生类的指针指向一个基类的对象。(2)希望用基类指针访问其公有派生类的特定成员,必须将基类指针用显示类型转换为派生类指针。8第七章虚函数和多态性7.1虚函数7.1.3虚函数与多态性1.虚函数的概念一个指向基类的指针可用来指向从基类公有派生的任何对象,这一事实是非常重要的,是C++实现运行时多态性的关键途径。如果有多个或者多层派生类,通过一个基类指针可以访问所有派生类对象的成员函数,这样就可以实现一个接口,多个实现的访问了。但是观察例7-3,基类指针能否访问不同派生类对象的7、成员函数呢?9第七章虚函数和多态性7.1虚函数7.1.3虚函数与多态性classBase{public:Base(inta){x=a;}voidwho(){cout<<"base"<8、nta):Base(a){}voidwho(){cout<<"Secondderivation"<
5、un()Bref.B::fun();//调用B::fun()A*Apointer=&Cobj;Apointer->fun();//调用A::fun()7第七章虚函数和多态性7.1虚函数7.1.2基类和派生类的指针与对象的关系(1)可以用一个指向基类的指针指向其公有派生类的对象。这时,基类指针访问的是派生对象的拥有的基类部分,派生类自身的部分不能被基类指针访问。但是用指向派生类的指针指向一个基类的对象是不正确的,因为派生类指针可以访问派生类公有成员,但基类对象没有派生类自身成员,因此用派生类指针指向基类对象时,如果访问派
6、生类公有成员,而该成员实际不存在,所以不能用指向派生类的指针指向一个基类的对象。(2)希望用基类指针访问其公有派生类的特定成员,必须将基类指针用显示类型转换为派生类指针。8第七章虚函数和多态性7.1虚函数7.1.3虚函数与多态性1.虚函数的概念一个指向基类的指针可用来指向从基类公有派生的任何对象,这一事实是非常重要的,是C++实现运行时多态性的关键途径。如果有多个或者多层派生类,通过一个基类指针可以访问所有派生类对象的成员函数,这样就可以实现一个接口,多个实现的访问了。但是观察例7-3,基类指针能否访问不同派生类对象的
7、成员函数呢?9第七章虚函数和多态性7.1虚函数7.1.3虚函数与多态性classBase{public:Base(inta){x=a;}voidwho(){cout<<"base"<8、nta):Base(a){}voidwho(){cout<<"Secondderivation"<
8、nta):Base(a){}voidwho(){cout<<"Secondderivation"<
此文档下载收益归作者所有