C++ 对象成员变量和成员函数的内存模型及权限

                                                C++ 对象成员变量和成员函数的内存模型及权限

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

2.成员函数在内存中的位置

所有对象共享类中的成员函数,成员函数是函数,只可能存放在代码段里。

3.成员变量在内存中的位置

每个对象有独立的成员变量,成员变量是数据,数据只可能存放在栈空间(运行时)、堆空间(运行时)、全局数据区这三个区域。

运行时的对象退化为结构体的形式,所有成员变量在内存中像结构体中的一样依次排布,遵循内存对齐,可以通过内存地址直接访问成员变量。

4.如何区分权限

访问权限关键字在运行时失效,private 和 protected 的访问权限仅在编译时候有效。C++ 编译器在编译成员函数调用的时候,隐藏的传递了对象的地址,在成员函数的内部有了这个隐藏的地址当然可以直接访问对象的成员变量。(即编译时区分)

5.虚函数,虚表和虚指针

C++中,一个类存在虚函数,那么编译器就会为这个类生成一个虚函数表,在虚函数表里存放的是这个类所有虚函数的地址。虚函数表是属于类,类的所有对象共享这个类的虚函数表。

当生成类对象的时候,编译器会自动的将类对象的前四个字节设置为虚表的地址,而这四个字节就可以看作是一个指向虚函数表的指针。虚函数表可以看做一个函数指针数组。

转载于:https://www.cnblogs.com/XZDSF/p/11363597.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值