C++对象构造时,构造函数运行时并不知道VT的存在

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() 也是一样。

posted @ 2013-10-16 04:54  findumars  Views(372)  Comments(0Edit  收藏  举报