C++_类

面向对象

是一种编程方法、思想与风格
以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。
将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。

对象
对象是人们要进行研究的任何事物,对象是封装的最基本单位。

对象的状态和行为
对象具有状态,一个对象用数据值来描述它的状态。
对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。
对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。


具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。对象的抽象是类,类的具体化就是对象。

类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。
类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。

类的大小

类大小的计算遵循结构体内存对齐规则
类的大小只于普通数据成员有关
空类的大小是1字节
虚函数和虚继承对类大小有影响

内存对齐

用空间换时间,可以加快访速度。
不同平台对齐数不一样,对齐方便移植。

结构体内存对齐规则:
1.第一个成员在结构体变量偏移量为0的地址处
2.其他成员变量要对齐到对齐数的整数倍的地址处(对齐数为编译器默认对齐数与该成员大小的较小值,VS-8  gcc-4)
3.结构体总大小为最大对齐数(所有成员变量除了第一个成员都有一个对齐数)的整数倍
4.如果嵌套结构体,嵌套的结构体对齐到自己最大对齐数整数倍处
5.结构体整体大小是所有最大对齐数(含嵌套结构体)的整数倍

四个默认的成员函数

构造函数——对象实例化时自动调用初始化
拷贝构造函数——创建对象时使用同类对象初始化
析构函数——一个对象生命周期结束时自动调用
赋值运算符重载——对已存在对象进行拷贝构造

构造函数
1.函数名与类名相同
2.无返回值
3.可以重载
4.如果类定义中没有,编译器会自动产生一个缺省的,定义了就不会生成。
5.无参和全缺省都认为是缺省构造函数,只能有一个。

拷贝构造函数
1.是特殊的构造函数,其实是构造函数的重载。
2.必须使用引用传参,否则会无穷递归调用
3.没定义编译器会默认缺省的构造函数。

析构函数
1.类名前面加上~
2.无参数无返回值
3.一个类只有一个
4.未定义编译器会自动生成一个
5.不是删除对象,而是清理(比如释放指针变量指向的动态开辟的内存空间)

赋值运算符重载
1.operator + 合法的运算符 构成函数名(operator=).
2.重载运算符不能改变运算符优先级/结合性/操作数个数

5个不能重载的运算符: .* / :: / sizeof / ?: / .

ps:部分参考了百度百科

猜你喜欢

转载自blog.csdn.net/cute_shuai/article/details/79781591