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
- C++对象内存模型---数据封装
- 【C++】C++对象内存模型简介
- 漫谈C++:对象内存模型分析
- C++-对象继承内存模型配图
- C++对象模型之数据成员内存布局
- 对象的内存模型
- 对象的内存模型
- C++ 对象内存模型
- 对象内存模型浅析
- c++内存对象模型
- C#对象 内存模型
- C++内存对象模型
- C++对象内存模型
- C++对象内存模型
- java对象内存模型
- C++对象内存模型
- C++对象内存模型
- 对象内存模型[0]
- No space left on device svn: Commit failed (details follow): svn: Can't flush file '/srv/tsocsvn/ts
- 在海量数据中统计出现次数最多的n个
- 新GRE填空备考--双空PK三空--法
- 断言 IOS
- 图斑合并过程求边界
- C++对象内存模型---数据封装
- java实现各种排序算法及比较
- spring mvc 基于maven的完整demo
- PAT Rational Arithmetic (20)
- 九度OJ-题目1367:二叉搜索树的后序遍历序列
- CocoaPods使用说明
- 合并excel 宏文件
- SAT语法--介绍两大必考从句
- UML类图