第十五章 多态性和虚函数

被virtual关键字修饰的成员函数就是虚函数。虚函数的作用是实现多态性。所谓多态性就是以共同的方法,对不同的对象采取不同的策略(一个接口,多种方式)。

虚函数只能是类中的成员函数,而且不能是静态的。

15.1 C++程序员的演变

如果不用虚函数,就等于还不懂得面向对象程序设计。

15.2 向上类型转换

Instrument & Wind

15.3 问题

捆绑:函数体与函数调用相联系成为捆绑。

当捆绑在程序运行之前(由编译和连接器)完成时,称为早捆绑(early binding);

捆绑根据对象的类型,发生在运行时,称为晚捆绑或动态捆绑。

15.4 虚函数

虚函数实现动态的条件:
1. 类之间的继承关系满足赋值兼容性规则;
2. 改写了同名的虚函数;
3. 根据赋值兼容性规则使用指针(或引用)。

15.5 C++如何实现晚捆绑

为每个类设置VTABLE,初始化VPTR,为虚函数调用插入代码。

15.7 抽象基类和纯虚函数

纯虚函数使用关键字virtual,并在其后机上=0。

纯虚函数没有函数体,其作用是:在基类中为其派生类保留一个函数的名字,以便派生类根据需要对它进行定义。

包含有纯虚函数的类称为抽象类,抽象类只能作为基类,所以又称抽象基类。

抽象类不能定义对象。

抽象类至少含有一个虚函数,而且虚函数中至少有一个纯虚函数。

15.11 虚析构函数

如果将基类的析构函数声明为虚函数,由该基类派生出的所有派生类的析构函数也都自动成为虚函数,即是派生类的析构函数与基类的析构函数名字不相同。

构造函数不能为虚函数,但是析构函数能够且常常必须是虚函数。

你可能感兴趣的:(第十五章 多态性和虚函数)