当前位置:编程学习 > C/C++ >>

C++虚函数探讨(二)

 

环境:VS2010

代码:

#include <iostream> 

using namespace std; 

class A{ 

   public: 

    A() { q(); cout<<"A::A()"<<endl; } 

     virtual void q() { cout<<"A"<<endl; } 

}; 

class B:public A{ 

   public: 

     B() { q(); cout<<"B::B()"<<endl;} 

     void q() { cout<<"B"<<endl; } 

};  

 

int main(void){ 

    A* p=new B; 

    p->q(); 

    delete p; 

    return 0; 

 

 

分析:

主函数里构造B,应该调用基类构造函数,再调用自己的构造函数,这里容易想明白,但是构造函数里调用了q函数,q又是虚函数,这里应不应该调用派生类的q函数呢?

观察输出结果:

\

 

可以看出,并没有看到调用派生类的q虚函数。

这是为什么?因为构造对象时是从基类开始,到派生类的组合类,最后才是自己。当调用基类的构造函数时,不可能调用派生类的虚函数,因为对象都没有构造完全,怎么能让基类的指针指向派生类呢?所以是不会调用派生类的虚函数的。

总结:当基类构造函数调用虚函数时,不会调用派生类的虚函数

 


作者 Wentasy
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,