天天看点

C++面试题 构造函数调用虚函数

      在构造函数中,虚拟机制不会发生作用。因为基类的构造函数在派生类构造函数之前执行,当基类构造函数运行时,派生类的数据成员还没有初始化。如果基类构造期间调用的虚函数向下匹配到派生类,派生类的函数理所当然会涉及到本地数据成员,但是那些数据成员还没有初始化,而调用涉及一个对象还没有初始化的部分自然是危险的,因此虚函数不会向下匹配到派生类,而是直接执行基类的函数。下面通过一个例子来证实:

#include <iostream>

using namespace std;

class A{

  public:

    A(){dosth();}

    virtual void dosth(){cout<<"I am A"<<endl;}

};

class B:public A

{

   public:

     virtual void dosth(){cout<<"I am B"<<endl;}

};

int main()

{

    B b;

    return 0;

}

运行结果:

C++面试题 构造函数调用虚函数

继续阅读