有虚函数的基类的指针指向自己,调用虚函数必经过虚表
基类指针指派生,实际上本该也只能调用基类的函数,但若是基类定义了虚函数,则派生类定义同名函数发生覆盖,用指针调用时,调用的就是派生类覆盖的函数
若继承了两个基类,都有同名函数,一个是虚函数一个不是,派生类定义的同名函数优先为虚函数。
为何构造函数不能设置为虚函数?
-
虚函数表是在对象构造期间初始化的,若构造函数为虚函数,调用需要通过虚表,而此时虚表还未准备好,会导致无法正确分派虚函数。
-
关于基类与派生类的构造顺序
-
构造派生类对象时,会首先调用基类构造函数,再调用派生类构造函数。
-
若基类构造是虚函数,被调用时派生类还未构造,但会试图调用派生类的构造函数,会发生未定义行为,因为派生类对象都还不存在。
-