C++_第07讲 多态性与虚函数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

对象指针使用举例
一个指向基类的指针可用来指向从基类公 有派生的任何对象
这一事实非常重要,它是C++实现运行时多态的关键途径 我们可以用“炉子”这个词来统称微波炉或者煤气炉。
对象指针的使用
引入派生类后,对象指针的使用注意以下问题: 1 可用一个声明让指向基类对象的指针指向它的公有 派生的对象。 2 不能将一个声明为派生类对象的指针指向其基类的 一个对象 3 当声明为指向基类对象的指针,当指向派生类对象 时,只能利用它来直接访问派生类中从基类继承来的 对象,不能直接访问公有派生类中的特定的成员。若 想访问其公有派生类的特定成员,可以将基类指针显 式类型转换为派生类指针来实现
B B_obj ;
p = & A_obj ; p = & B_obj ;
// 类型 B 的对象
// p 指向类型 A 的对象 // p 指向类型 B 的对象,它是 A 的派生类
利用 p,可以通过 B_obj 访问所有从 A_obj 继承的元素 , 但不能用 p访问 B_obj 自身特定的元素 (除非用了显式类型转换)
一种是参数有所差别的重载
另一种是函数所带的参数相同,只是它 们属于不同层的类
运行时的多态性
在C++中,运行时的多态性是用虚函数 来实现的
对象指针
指向基类和派生类的指针是相关的。
例如:
A * p ;// 指向类型 A 的对象的指针 A A_obj ; // 类型 A 的对象
class A
class B : public A
虚函数
虚函数是C++中用于实现多态 (polymorphism)的机制。核心理念就 是通过基类访问派生类定义的函数。
虚函数的定义
虚函数是在基类中冠以关键字 virtual 的成员函数。
虚函数注意事项
在派生类重定义虚函数时必须有相同的 函数原型,包括返回类型,函数名、参 数个数、参数类型的顺序必须相同 虚函数必须是类的成员函数。不能为全 局函数,也不能为静态函数
析构函数可以是虚函数,但构造函数不 能为虚函数
纯虚函数
如下声明表示一个函数为纯虚函数: virtual void foo()=0;
纯虚函数的意思是:我是一个抽象类! 我没有实例! 拥有纯虚函数的类是抽象类
抽象类
如果一个类中至少有一个纯虚函数,则 该类称为抽象类
抽象类的使用
1 抽象类只能用作其它类的基类,不能 建立抽象类的对象 2 抽象类不能用作参数类型,函数返回 类型或显式转换的类型 3 可以声明指向抽象类的指针和引用, 指针可以指向它的派生类
编译时的多态性
编译时的多态性是通过重载函数来实现 的。重载函数有下述两种方式: 1 在一个类中说明的重载 2 基类成员函数在派生类中的重载
在一个类中说明的重载
在一个类中说明的重载函数之间,靠所 带的参数个数或参数类型的不同加以区 分。在编译时系统就可以根据参数上的 差异来区分这些函数
基类成员函数在派生 类中的重载

多态性在C++中的体现
多态性是使用不同的对象的相同方法时 能产生不同动作 C++支持两种多态性,一种是编译时的 多态性,另一种是运行时的多态性
两种方式
在面向对象的系统中,有两种编译方式, 及早期联编和滞后联编
早期联编是指系统在编译时就决定如何 确定某一动作
滞后联编是指系统在运行时动态确定某 一动作,也称为动态联编
第9讲
多态性与虚函数
多态性在生活中的体现
煤气炉是炉子中的一种 微波炉也是炉子中的一种 煤球炉是炉子中的一种 他们都可以煮东西
多态性在生活中的体现
微波炉可以煮鸡蛋



Hale Waihona Puke 打开微波炉的门 放入鸡蛋 设定时间 设定微波强度 关上门 启动
多态性在生活中的体现
煤气炉可以煮鸡蛋
鸡蛋放到小锅里 把小锅放到煤气炉上 打开煤气罐阀门 电子点火 设定火力强度 盖上锅盖 等待鸡蛋熟
相关文档
最新文档