多态性在生活中的体现
- 煤气炉是炉子中的一种
- 微波炉也是炉子中的一种
- 煤球炉是炉子中的一种
- 他们都可以煮东西
- 微波炉可以煮鸡蛋
(1)打开微波炉的门
(2)放入鸡蛋
(3)设定时间
(4)设定微波强度
(5)关上门
(6)启动 - 煤气炉可以煮鸡蛋
(1)鸡蛋放到小锅里
(2)把小锅放到煤气炉上
(3)打开煤气罐阀门
(4)电子点火
(5)设定火力强度
(6)盖上锅盖
(7)等待鸡蛋熟
多态性在C++中的体现
- 多态性是使用不同的对象的相同方法时能产生不同动作
- C++支持两种多态性,一种是编译时的多态性,另一种是运行时的多态性
- 在面向对象的系统中,有两种编译方式,及早期联编和滞后联编
- 早期联编是指系统在编译时就决定如何确定某一动作
- 滞后联编是指系统在运行时动态确定某一动作,也称为动态联编
编译时的多态性
- 编译时的多态性是通过重载函数来实现的。重载函数有下述两种方式:
(1)在一个类中说明的重载
(2)基类成员函数在派生类中的重载 - 在一个类中说明的重载函数之间,靠所带的参数个数或参数类型的不同加以区分。在编译时系统就可以根据参数上的差异来区分这些函数
- 基类成员函数在派生类中的重载:
(1)一种是参数有所差别的重载
(2)另一种是函数所带的参数相同,只是它们属于不同层的类
运行时的多态性
- 在C++中,运行时的多态性是用虚函数来实现的
虚函数
- 虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数
- 虚函数是在基类中冠以关键字 virtual 的成员函数
- 在派生类重定义虚函数时必须有相同的函数原型,包括返回类型,函数名、参数个数、参数类型的顺序必须相同
- 虚函数必须是类的成员函数。不能为全局函数,也不能为静态函数
- 析构函数可以是虚函数,但构造函数不能为虚函数
纯虚函数
- 纯虚函数的意思是:我是一个抽象类!
- 拥有纯虚函数的类是抽象类
抽象类
- 如果一个类中至少有一个纯虚函数,则该类称为抽象类
- 抽象类只能用作其它类的基类,不能建立抽象类的对象
- 抽象类不能用作参数类型,函数返回类型或显式转换的类型
- 可以声明指向抽象类的指针和引用,指针可以指向它的派生类