环境:VS2010
代码:
#include
using namespace std;
class A{
public:
A() { q(); cout<<"A::A()"< virtual void q() { cout<<"A"< }; class B:public A{ public: B() { q(); cout<<"B::B()"< void q() { cout<<"B"< }; int main(void){ A* p=new B; p->q(); delete p; return 0; } 分析: 主函数里构造B,应该调用基类构造函数,再调用自己的构造函数,这里容易想明白,但是构造函数里调用了q函数,q又是虚函数,这里应不应该调用派生类的q函数呢? 观察输出结果: 可以看出,并没有看到调用派生类的q虚函数。 这是为什么?因为构造对象时是从基类开始,到派生类的组合类,最后才是自己。当调用基类的构造函数时,不可能调用派生类的虚函数,因为对象都没有构造完全,怎么能让基类的指针指向派生类呢?所以是不会调用派生类的虚函数的。 总结:当基类构造函数调用虚函数时,不会调用派生类的虚函数

作者 Wentasy