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

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

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

  • 相关阅读:
    string
    auto和decltype
    const限定符
    &(引用) 和 *(指针)
    extern关键字
    关于将函数写入头文件问题(分离式编译)
    poj2154(polya定理+欧拉函数)
    bzoj2115(线性基)
    51nod1832(二叉树/高精度模板+dfs)
    51nod1464(trie + dfs)
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3268685.html
Copyright © 2011-2022 走看看