您的位置:首页 > 编程语言 > C语言/C++

构造函数中调用虚函数---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的这个指针。。

如果大家有兴趣的话,不防去看看汇编代码,看看到底是怎么回事。。相信一定会有收获的。。

看到有些人问这个问题,小小的解答一下。。纯属娱乐。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: