构造函数中调用虚函数---C++
2013-08-19 19:53
162 查看
#include <stdio.h> class A { public: A(){function();} virtual void function(){printf("A");} }; class B :public A { public: B(){function();} void function(){printf("B");} }; int main() { B b; return 0; };
大家说会出现什么情况???有的人会说输出两个B,这不是虚函数么??不是传说中的多态么。可惜很遗憾的告诉你是输出AB。
分析:在调用构造函数B的之前肯定会去调用父类的构造函数,即A(),这是毋庸置疑的,那么A的构造方法中凭什么去调用b的函数呢??此时b的任何部分都还没有构造起来,怎么就回去调用b的东西呢。。当然我们这里需要的只是一个虚函数表的地址,即一个子类对象中的指针。。所以A没有办法去调用b的这个指针。。
如果大家有兴趣的话,不防去看看汇编代码,看看到底是怎么回事。。相信一定会有收获的。。
看到有些人问这个问题,小小的解答一下。。纯属娱乐。。
相关文章推荐
- 摘:C++中构造函数和析构函数避免调用虚函数的问题
- C++ 构造函数或析构函数调用虚函数
- C++中构造函数能调用虚函数吗?(答案是语法可以,输出错误),但Java里居然可以
- C++学习笔记-----不要在构造函数和析构函数中调用虚函数
- 【C++】不要在构造函数或析构函数内调用虚函数
- c++有关构造函数和析构函数中调用虚函数问题
- C++继承中构造函数、析构函数调用顺序及虚函数的动态绑定
- C++不要在构造函数和析构函数中调用虚函数
- 读书笔记 effective c++ Item 9 绝不要在构造函数或者析构函数中调用虚函数
- C++不要在构造函数和析构函数中调用虚函数
- C++中构造函数能调用虚函数吗?
- C++中构造函数能调用虚函数吗?(转)
- 【深入探索c++对象模型】c++中构造函数调用虚函数的讨论
- C++中构造函数能调用虚函数吗?
- Java和C++构造函数中调用虚函数的区别
- C++中构造函数中调用虚函数的问题
- C++中 构造函数 析构函数 能否调用虚函数的问题
- 读书笔记 effective c++ Item 9 绝不要在构造函数或者析构函数中调用虚函数
- C++中构造函数能调用虚函数吗?
- 构造函数中调用虚函数---C++