1、虚函数、覆盖以及多态的概念
1)class 基类 {
virtual 返回类型 函数名 (形参表) [const] { ... }
};
的成员函数,称为虚函数或方法。
2)覆盖
如果子类的成员函数和基类的虚函数具有“相同”的函数原型,那么该成员函数就也是虚函数,无论其是否带有virtual关键字,且对基类中的虚函数构成覆盖。
class 子类 : public 基类 {
[virtual] 返回类型 函数名 (形参表) [const] { ... }
};
3)多态
如果子类提供了对基类虚函数的有效覆盖,那么通过一个指向子类对象的基类指针,或者引用子类对象的基类引用,调用该虚函数,实际被调用的将是子类中的覆盖版本,而非基类中的原始版本,这种语法现象谓之多态。
4)覆盖的条件
A.必须是非静态的成员函数,但是构造函数除外;
B.必须在基类中用virtual关键字声明其为虚函数;
C.子类中的覆盖版本和基类中的原始版本,函数原型(返回类型+函数名+形参表+常属性)必须“相同”;
D.如果基类中的虚函数返回的是某个类类型的指针或者引用,那么该虚函数在子类中的覆盖版本,也可以返回基类版本所返回的指针或者引用的类型的子类的指针或者
引用————类型协变
E.覆盖的条件与访问控制属性无关。
5)多态的条件
A.虚函数和有效覆盖
B.通过指针或者引用调用虚函数
C.在基类的构造和析构函数中调用虚函数,没有多态性