class A {

public:

A() { init(); }

virtual void init() { printf("A::init\n"); }

};

class B : public A {

public:

B() { init(); }

virtual void init() { printf("B::init\n"); }

};

int main(int argc, char* argv[])

{

B b;

return 0;

}

打印结果:

A::init // 先执行父类A的构造函数,它严格执行自己的VT函数

B::init // 然后执行B的构造函数,它执行自己的VT当然没问题。

class A {

public:

A() { init(); }

virtual void init() { printf("A::init"); }

};

class B : public A {

public:

virtual void init() { printf("B::init"); }

};

int main(int argc, char* argv[])

{

B b;

return 0;

}

打印结果:

A::init // 这里B类没有构造函数,因此只执行A类的构造函数,也就只执行A的VT函数,因为那时候A不知道B的存在(也许是B对象的内存还没有构建完毕)。

就算换成指针A* a= new B() 也是一样。