构造函数中调用虚函数---C++

#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的这个指针。。

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

看到有些人问这个问题,小小的解答一下。。纯属娱乐。。

原文地址:https://www.cnblogs.com/bbsno1/p/3268685.html