c++为什么不能在构造函数里调用虚函数?

c++为什么不能在构造函数里调用虚函数?

c++的构造顺序先构造父类,然后构造子类,析构顺序相反。

如果在构造函数调用虚函数,例如:ClassB继承于ClassA,如果在ClassA的构造函数里调用虚函数,此时因为ClassB并没有构造,所以ClassB的成员都没有初始化,如果编译执行ClassB继承虚函数,那么会发生不可预知的结果。因此,编译器会选择直接执行ClassA里的虚函数。

所以,尽管在构造函数里调用虚函数不会发生严重错误,但是不能达到我们预想的效果,且结果未知,很容易让人莫名其妙,找不到原因。

演示图