C++类与对象
面向对象:对象是指类的实例,将对象作为程序的基本单元,将程序和数据封装在其中,以提高软件的重用性,灵活性和扩展性。
面向对象的三大特性:封装、继承、多态
类是现实世界对实体的抽象类别的映射,它是一个模型,定义出一个类并没有分配实际的内存空间来存储它。每个对象的大小为类中所有成员变量的大小之和,并遵循内存对齐规则。
内存对齐的原因:
内存的访问不是任意位置访问的,只能读取CPU字长整数倍处的地址,这是硬件限制,内存对齐是一种以空间换时间的做法。
定义一个类
class A{
char ch;
double d;
};
读取变量d的内容,假设CPU字长4字节
遵循内存对齐规则读取变量内容时,能减少内存读取次数,以此来提高效率
内存对齐规则:
1.第一个成员在与结构体变量偏移量为0的地址处。
2.其他成员变量要对齐到min(编译器默认的对齐数,该成员大小)的整数倍的地址处。
3.结构体总大小为最大对其数的整数倍。
4.如果嵌套了结构体,嵌套的结构体对齐到自己的最大对其数的整数倍处,结构体的整体大小就是所有最大对齐数的整数倍。
空类的大小:1字节,用来占位,表示自己存在过~
类的默认成员函数:
构造函数
构造函数在定义对象时自动执行一次,用来对成员变量初始化。
特征:
1.函数名与类名相同。
2.无返回值。
3.对象构造时系统自动调用对应的构造函数。
4.构造函数可以重载。
5.构造函数可以在类中定义,也可以在类外定义。
6.如果类定义中没有给出构造函数,则编译器自动产生一个无参的构造函数,但只要定义了一个构造函数,系统就不会默认生成缺省的构造函数。
拷贝构造函数
拷贝构造函数在创建对象时使用同类对象来进行初始化,拷贝构造函数是特殊的构造函数。
特征:
1.拷贝构造函数是构造函数的一个重载。
2.拷贝构造函数的参数必须使用引用传参,使用传值的方式会引发无穷递归调用。
3.若未显示定义,系统会默认生成缺省的拷贝构造函数。
析构函数
析构函数用来在对象生命周期结束时,完成清理工作。
特征:
1.析构函数在类名前加~。
2.析构函数无参数无返回值。
3.一个类有且只有一个析构函数,若未缺省定义,会自动生成。
4.对象声明周期结束时,编译器自动调用析构函数。
5.析构函数体内不是删除对象,而是做一些清理工作。
赋值运算符重载
赋值运算符重载是对一个已存在的对象进行拷贝赋值。
上一篇: 在Linux上学习汇编语言
下一篇: 在静态网站上搜索