C++对象模型分析

简介: C++对象模型分析

class是一种特殊的struct

1.在内存中class依旧可以看做变量的集合

2.class与struct遵循相同的内存对齐规则

3.class中的成员函数与成员变量是分开存放的

----每个对象有独立的成员变量

----所有对象共享类中的成员函数

struct B{
int i;
int j;
char c;//这里会内存对齐到int类型大小
double d;
};------》(sizeof(B)=20)
class A{
int i;
int j;
char c;
double d;
public :
void print(){}
};------->其大小也为20
int main(){
A a;
B* p=reinterpret_cast<B*>(a);
}


运行时的对象退化成结构体的形式:

1.所有的成员变量在内存中依次排布

2,成员变量间可能存在内存间隙

3.访问权限运行时失效

4.可以通过内存地址直接访问成员变量

5.类中的成员函数位于代码段中

6.调用成员函数时对象地址访问成员变量

7.C++语法规则隐藏了对象地址的调用过程


继承的对象模型分析:

继承发生后子类的代码块会加在父类的代码块后面

C++多态实现原理:

 1.当类中声明虚函数时,编译器会在类中生成一个虚函数

 2.虚函数表是一个存储成员函数地址的数据结构

 3.虚函数表是由编译器自动生成与维护的

  4.virtual成员函数会被编译器放入虚函数表中

  5.存在虚函数中,每个对象都有一个指向虚函数表的指针

相关文章
|
4天前
|
存储 编译器 C语言
c++的学习之路:5、类和对象(1)
c++的学习之路:5、类和对象(1)
19 0
|
29天前
|
存储 编译器 C语言
C++入门: 类和对象笔记总结(上)
C++入门: 类和对象笔记总结(上)
34 0
|
4天前
|
C++
c++的学习之路:7、类和对象(3)
c++的学习之路:7、类和对象(3)
19 0
|
3天前
|
存储 搜索推荐 C++
【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构
【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构
|
3天前
|
编译器 C++
【C++基础(八)】类和对象(下)--初始化列表,友元,匿名对象
【C++基础(八)】类和对象(下)--初始化列表,友元,匿名对象
|
9天前
|
编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
|
9天前
|
存储 编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
|
10天前
|
C++
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
|
10天前
|
存储 编译器 C++
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
【C++成长记】C++入门 | 类和对象(中) |拷贝构造函数、赋值运算符重载、const成员函数、 取地址及const取地址操作符重载
|
16天前
|
存储 编译器 C语言
C++类与对象
C++类与对象
16 0