在derived class对象的base class对象构造期间,对象的类型是base class ,而不是derived class。所以virtual函数是base class中的函数,而不是derived class中的函数。
对象在derived class构造函数开始执行前,不会成为一个derived class函数。
同样的道理也适用于析构函数,一旦derived class对象开始执行,对象内的derived class成员变量便呈现未定义值。进入base class就是base class。
确定你的构造函数和你的析构函数(在对象被创建和被销毁期间)都没有调用virtual函数,而且他们所调用的所有函数也必须满足这个要求。
解决这个问题,可以在derived class中返回信息给base class。
注意:
在构造和析构期间不要调用virtual函数,因为这类调用从不降至derived class。