zoukankan      html  css  js  c++  java
  • 继承虚函数单层需继承的内存图(VC6.0)

    上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家一起学习一下继承虚函数

    继承关系图

    继承和虚函数

    
    
    
    
    class A
    {
    	virtual aa(){};
    };
    
    class B : public virtual  A
    {
    	char j[3];//入加一个变量是为了看清楚class中的vfptr放在什么置位
    public:
    	virtual bb(){};
    };
    class C : public B
    {
    	char i[3];
    public:
    	virtual cc(){};
    };
    #include <iostream>
    using namespace std;
    int main()
    {
    	A aa;
    	int a = sizeof(aa);
    	B bb;
    	int b = sizeof(bb);
    	C cc;
    	int c = sizeof(cc);
    	printf("a= %d\nb=%d\nc=%d\n",a,b,c);
    	return 0;
    }

        上面是内存图

        继承和虚函数

        继承和虚函数继承和虚函数

        继承和虚函数

        群体的单步调试内存图如下

        继承和虚函数

        每日一道理
    美丽是平凡的,平凡得让你感觉不到她的存在;美丽是平淡的,平淡得只剩下温馨的回忆;美丽又是平静的,平静得只有你费尽心思才能激起她的涟漪。

        图一   单层虚继承刚到aa时的图

        继承和虚函数

        图二   单层继承aa运行完以后的图

        从图一可以看出,变量在内存的置位都定下来了(例如bb.j、cc.i、cc.B.j,还有与类有关的a、b、c三个变量),与虚函数有关的aa._vfptr、bb._vfptr等的内存值还是空的(0xcccccccc)然后到了图二以可就看出aa._vfptr的值就定确了,这说明虚函数表针指(vptr)在运行时才定确真正的值。

        继承和虚函数

        图三   单层虚继承刚到bb时的图

        继承和虚函数

        图四   单层继承bb运行完以后的图

        图三与图四的较比可以看出,虚函数针指_vfptr或者vptr在运行时才定确,一样指向virtual base class的类的偏移或者针指也是在运行时定确。

        继承和虚函数

        图五   单层虚继承刚到aa时的图

        继承和虚函数

        图六   单层继承aa运行完以后的图

        继承和虚函数

        图七   虚函数表

        虚函数表在程序代码以后,旁边以四个节字的0开隔。

        

    文章结束给大家分享下程序员的一些笑话语录: 苹果与谷歌之争就是封闭收费与自由免费思想之争。(别急着把google来膜拜哦?那可是一家公司,以赚钱为目标的公司!当年我Party就是这样把广大劳动人民吸引过来的。今天的结果你们都看到了。)

  • 相关阅读:
    八皇后问题--------------------递归回溯
    排序算法06------------------------插入排序
    无重复字符最长子串----------------滑动窗口法
    排序算法05------------------------堆排序(图解)
    排序算法04------------------------归并排序
    图形学基础(一)光栅图形学_下:剪裁
    计网Top-Down 抄书笔记(二)——应用层
    图形学基础(二)图形变换_下:3D 平行投影
    图形学基础(二)图形变换_上:2D 基本变换/复合变换
    图形学基础(一)光栅图形学_上:画直线/圆、区域填充
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3063622.html
Copyright © 2011-2022 走看看