《C++大学教程》学习笔记(十二)
1.多态性
1.1简介
C++ 支持多态性。所谓多态性是指由于继承而关联在一起的不同的类的对象,对于相同的成员函数调用作出不同反应的一种能力。多态使我们能“通用化编程”,而不是“特殊化编程”。
多态性是通过virtual 函数和动态绑定实现的,关于这一点,有两种绑定方式要加以区分:
- 通过基类指针或引用调用虚函数的,在执行时进行动态绑定(迟绑定)。
- 通过对象名称调用虚函数的,在编译时进行静态绑定。
抽象基类是不能实例化任何对象的,但可以用来声明由该基类派生出的具体类的指针或者引用。
基类的指针可以指向派生类对象,但派生类指针不能指向基类对象。同时,基类指针只能调用派生类中的virtual函数(继承自基类),调用其他派生类成员函数是不可行的。
1.2实例
书上的实例同样太过繁琐,我仍然选择自己设计一个多态性的实例。
我们在上一章的基础上进行修改,把Vehicle改成抽象基类,并添加了同样继承Vehicle的Plane类。其中,Vehicle类声明两个virtual函数,一个是 print 虚函数,另一个则是 details 纯虚函数:
virtual void print() const; //声明虚函数,仍需在Vehicle类中实现
virtual void details() const = 0; //声明纯虚函数,无需实现
我们通过Car类与Plane类继承Vehicle,重写(override)或实现了不同功能的print函数和details函数,并在main函数中进行了多态性的实践。
具体的文件结构及代码如下所示:
Vehicle.hpp文件:
#ifndef Vehicle_hpp
#define Vehicle_hpp
#include <string>
#include <iostream>
#include <stdexcept>
using namespace std;
//抽象类,因为有一个纯虚函数details
class Vehicle{
private:
string brand;
int topSpeed;
public:
Vehicle(string,