构造函数调用虚函数

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

#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;

}

运行结果:


猜你喜欢

转载自blog.csdn.net/qq_38211852/article/details/80637908