C++虚函数探讨(二)
来源:互联网 发布:js中blur 编辑:程序博客网 时间:2024/06/03 21:56
环境: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虚函数。
这是为什么?因为构造对象时是从基类开始,到派生类的组合类,最后才是自己。当调用基类的构造函数时,不可能调用派生类的虚函数,因为对象都没有构造完全,怎么能让基类的指针指向派生类呢?所以是不会调用派生类的虚函数的。
总结:当基类构造函数调用虚函数时,不会调用派生类的虚函数。
- C++虚函数探讨(二)
- 虚函数探讨
- 虚函数问题探讨
- C++指针探讨 (二)函数指针
- C++指针探讨 (二) 函数指针
- C++指针探讨 (二) 函数指针
- C++指针探讨 (二) 函数指针
- C++指针探讨 (二) 函数指针
- C++指针探讨 (二) 函数指针
- C++指针探讨 (二) 函数指针
- C++指针探讨 (二) 函数指针
- C++指针探讨 (二) 函数指针
- 关于C语言中函数调用和参数传递机制的探讨(二 .传递一个参数)
- 探讨虚函数(一)
- C++虚函数探讨(一)
- C++虚函数探讨(三)
- C++虚函数探讨(四)
- 有关C语言单元测试的探讨(二)
- C#:方法重载、构造函数、重载构造函数小结
- 云计算——物联网的基石
- 分页控件Jar包
- 科学的安装驱动的顺序
- RAMCloud使未来数据中心无需硬盘
- C++虚函数探讨(二)
- 关于PHP命名规则
- JFrame中父类和子类窗口的关闭问题
- 关于串口模块化的思考
- ARM中断处理流程
- iPhone4隐藏功能分享
- 一段简单的get web 页面的代码
- 参数编码 完全解决方案
- Java中float,double为什么会丢失精度。