C++对象内存模型---数据封装

来源:互联网 发布:成都管家婆软件 编辑:程序博客网 时间:2024/05/01 09:42


“C++是C的超集”,这句话里包含了两个问题:

1. C++兼容C;

2. C++在C之上进行了扩展;

那C++在C之上进行了哪些扩展呢?众所周知,C++内置了众多编程机制、支持众多编程风格:面向过程、基于对象、面向对象、面向、基于模板、泛型、元编程等等。其中,以面向过程、基于对象、面向对象的编程机制最为流行。

大家都知道,面向对象有三个基本特征:数据封装与抽象、继承、多态。下面通过分析C++对象内存模型,来剖析C++面向对象的这三个基本特征。

讲到C++的数据封装和抽象,就不得不提类的成员函数和成员数据:

成员数据非静态对象、静态对象成员函数非静态函数、静态函数、虚函数

下面,直接上测试代码,直观的看看C++的基本对象内存模型。

class A{};                             //size: 1class B{                               //size: 1    static int mem;    static void print();};class C{                               //size: 4    int mem;    void print();};
class D{                               //size: 8    char mem;    static int s_mem;    virtual void print1(){};
    virtual void print2(){};};
class E{                               //size: 4    virtual void print1() = 0;    virtual void print2() = 0;};

从测试结果来看,

1. 空类的Size为1,应为编译器自动添加了一个标记字节。(Size为0就太诡异了!)

2. 静态数据和静态函数,配置到对象之外。

3. 非静态函数,配置到对象之外。

4. 含有虚函数的对象,配置有一个指向类虚拟表(vtbl)的指针。

5. 纯虚对象(接口对象),配置有一个指向类虚拟表的指针。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果7plus主屏按键坏了怎么办 苹果六手机上的红色变成粉色怎么办 苹果手机出现闪屏和手感不灵怎么办 荣耀6plus后开不了机怎么办 苹果手机touch id密码忘了怎么办 苹果7摔出了一个裂缝怎么办 屏幕摔坏了下键盘失灵怎么办 苹果4s手机按健失灵怎么办 金立手机摔了一下黑屏了怎么办 苹果5s屏幕不亮了怎么办 苹果6s手机开不了机怎么办 苹果手机充电的地方坏了怎么办 手机丢了只有imei码该怎么办 在保修期的苹果被偷了怎么办 苹果手机在保修期之外坏了怎么办 把苹果售后给的备用机摔了怎么办 把售后给的备用机摔坏了怎么办 苹果4s屏幕玻璃碎了怎么办 苹果手机摔鼓起来了屏幕花了怎么办 苹果8卡屏幕划不动了怎么办 苹果x卡屏幕划不动了怎么办 苹果5s解锁密码忘了怎么办 苹果6s屏幕摔碎了怎么办 苹果手机掉在水里了怎么办 乐视手机掉水里没法触屏了怎么办 乐视电视有声音但是黑屏怎么办 苹果手机微信语音有回音怎么办 苹果4s死机了没反应了怎么办 苹果手表的显示平坏了怎么办 苹果5s屏幕翘起来了怎么办 苹果手机圆点卡住屏幕不能动怎么办 苹果5s卡屏怎么也不动应该怎么办 苹果5s手机触摸屏太灵敏怎么办 苹果5s手机关机滑动失灵怎么办 苹果5s关机开机后没信号怎么办 苹果手机5s被弄关机了怎么办 华为荣耀5c换屏后触摸失灵怎么办 三星笔记本鼠标触摸板没反应怎么办 有米6x触摸屏不好使怎么办? 小米5s屏幕触摸没反应怎么办 苹果5s主屏幕设置没反应怎么办