- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
面向对象程序设计语言C第07章_虚函数和多态性
面向对象程序设计语言C++
电子科技大学计算机学院
1
第七章 虚函数和多态性
C++使用多态性实现同一个消息,不同接收者采取不同的响应方式的这种现象。
多态性是一个事务有多种形态。
在面向对象语言中,一般这样描述多态:向不同对象发送同一个消息,不同的对象在接收时会产生不同的行为。也就是说,每个对象可以用自己的方式去响应共同的消息。
2
第七章 虚函数和多态性
C++语言的多态性有两种类型:
静态多态性和动态多态性。
函数重载和运算符重载都是静态的多态性。
在程序编译时系统就能够决定调用哪个函数,因此静态多态性又称为编译时的多态性。动态多态性时程序运行过程中才动态的确定操作所针对的对象。它又称为运行时的多态性。动态多态性是通过虚函数实现的。
3
第七章 虚函数和多态性
7.1 虚函数
7.1.1静态多态性
对于普通成员函数的重载,可表达为下面的方式:
(1)在同一个类中重载;
(2)在不同类中重载;
(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静态多态性
子类可以重载父类的成员:
class A {
public:
void fun() {coutIn Aendl;} };
class B : public A {
public:
void fun() {coutIn Bendl;} };
6
第七章 虚函数和多态性
7.1 虚函数
7.1.1静态多态性
C Cobj;
Cobj.fun(); //调用C::fun()
Cobj.B::fun(); //调用B::fun()
Cobj.A::fun(); //调用A::fun()
A Aref=Cobj;
Aref.fun(); //调用A::fun() ,编译器通过类型确定调用哪个版本
B Bref=Cobj;
Bref.fun(); //调用B::fun()
Bref.A::fun(); //调用A::fun()
A * Apointer=Cobj;
Apointer-fun(); //调用A::fun()
7
第七章 虚函数和多态性
7.1 虚函数
7.1.2基类和派生类的指针与对象的关系
(1)可以用指向基类的指针指向其公有派生类的对象
基类指针访问的是派生对象的拥有的基类部分,
派生类自身的部分不能被基类指针访问。
指向派生类的指针指向基类的对象是不正确的
(2)希望用基类指针访问其公有派生类的特定成员,
必须将基类指针用显示类型转换为派生类指针。
8
第七章 虚函数和多态性
7.1 虚函数
7.1.3 虚函数与多态性
1.虚函数的概念 ?
一个指向基类的指针可用来指向从基类公有派生的任何对象。
是 C++ 实现运行时多态性的关键途径。
如果有多个或者多层派生类,通过一个基类指针可以访问所有派生类对象的成员函数,这样就可以实现一个接口,多个实现的访问了。
9
第七章 虚函数和多态性
7.1 虚函数
7.1.3 虚函数与多态性
class Base {
public:
Base(int a) {x=a;}
void who()
{ cout base x\n;}
protected:
int x;
};
10
class First_d: public Base {
public:
First_d (int a ):Base(a){ }
void who() { cout First derivation x\n;} };
class Sec_d :public Base{
public:
Sec_d (int a):Base(a) { }
void who() { cout Second derivation x\n;}
};
第七章 虚函数和多态性
7.1 虚函数
7.1.3 虚函数与多态性
Base * p;
Base b
您可能关注的文档
- (备战中考)2012年中考数学新题分类汇编(中考真题+模拟新题)尺规作图.doc
- 金融错配与企业技术创新模式选择.docx
- (备战中考)2012年中考数学新题分类汇编(中考真题+模拟新题)图形的相似与位似.doc
- (好)社会实践报告写作的主要规范.doc
- (备战中考)2012年中考数学新题分类汇编(中考真题+模拟新题)一元一次方程以及应用.doc
- (备战中考)2012年中考数学新题分类汇编(中考真题+模拟新题)_综合型问题.doc
- 金龙乡中心学校“拒绝乘坐非法营运车辆教育宣传活动”实施方案.doc
- (备战中考)2012年中考数学新题分类汇编(中考真题+模拟新题)图形的展开与迭折.doc
- (备战中考)2012年中考数学新题分类汇编(中考真题+模拟新题)猜想规律与探索.doc
- 针织印花面料产生色斑的原因.doc
文档评论(0)