zoukankan      html  css  js  c++  java
  • 构造函数中调用虚函数---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的这个指针。。

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

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

  • 相关阅读:
    shuffle过程分析
    自定义分组
    自定义排序及Hadoop序列化
    MapReduce常见算法
    Partitioner
    Combiner
    自定义Counter使用
    WordCount_命令行运行时指定参数
    老的API实现WordCount
    Hadoop自定义类型处理手机上网日志
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3268685.html
Copyright © 2011-2022 走看看