类与对象知识点梳理

本文详细介绍了C++中的类定义、访问控制、struct与class的区别、封装概念、对象存储方式、结构体对齐规则、this指针以及编译器编译类的步骤,帮助读者理解面向对象编程的基础概念。
摘要由CSDN通过智能技术生成
一、类的两种定义方式

1、声明定义都放在类内部,成员函数放在类内部,编译器可能将其当作内联函数处理

2、声明定义分离,注意函数模板声明和定义不可分离

二、访问限定符

1、public修饰可供类外部访问

2、protected、private类外不能直接访问,这一点两者相同

3、作用域在两个访问符之间

4、class默认是private,struct默认为public

三、C++中class和struct区别

1、struct在C++和C语言中,都可以当作结构体使用,在C++中还可以用来定义类

2、class默认是private,struct默认为public

四、封装

将数据和操作数据方法有机结合,隐藏对象属性和实现细节,仅对外提供公开接口供外部访问

五、类对象存储方式

1、成员变量在对象中,成员函数在公共代码段,static在静态数据区,不计入对象大小

2、对于空类,编译器给其一个字节来标识这个类

六、结构体对齐

对齐方式:

1、第一个成员放在结构体偏移量为0的地址

2、其他成员变量对齐到对齐数的整数倍(对齐数=编译器默认对齐数与该成员大小较小值)

3、结构体总大小为最大对齐数整数倍

4、嵌套结构体对齐到自己的最大对齐数的整数倍,整体大小为最大对齐数的整数倍

作用:

各个硬件平台对存储空间的处理有很大的不同,一些平台对某些特定类型的数据只能从某些地址开始存取,如果不按要求方式存储,可能会对存取效率造成影响,之前读一次的可能要两次才能拿到

如何修改默认对齐数:

使用#pragma pack设定对齐数

七、this指针

1、类型:类类型* const,因此this指针不可更改

2、只能在成员函数内部使用,因为只有成员函数参数有this指针

3、对象中不存储this指针,通过ecx寄存器传递

4、对于空this指针是否出错,主要看调用函数是否访问类成员,如果不访问不会出错,访问会出现空指针错误

5、类静态成员函数没有this指针,因此无法调用类的非静态成员

八、编译器编译类的步骤

1、识别类名

2、识别类成员变量

3、识别类的成员函数并进行修改,为每个成员函数添加this指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值