定义类
约 870 个字 180 行代码 预计阅读时间 9 分钟
类的概念
类是C++中实现面向对象编程的基本单位,它将数据和操作数据的方法封装在一起。一个类既包含属性(数据成员),也包含服务(成员函数)。
从结构体到类
-
C语言的结构体
-
C++的类实现
类的内部机制
this
是所有成员函数的隐藏参数,类型为当前类的指针- 调用成员函数时,对象地址会自动传给this指针
::
用于指定函数属于哪个类<类名>::<函数名>
表示该函数是类的成员
面向对象的思想
-
案例:售票机
售票机在客户投入正确金额后打印票据。客户"投入"钱,然后请求打印票据。机器会记录收集的总金额。
- 走到机器前
- 向机器投币
- 机器打印票据
- 拿票离开
这种方法模拟了买票的过程,但没有创建真正的"机器"对象。
-
类的声明与定义
- 类声明和成员函数原型放在头文件(.h)中
- 成员函数定义放在源文件(.cpp)中
- 编译器一次只处理一个.cpp文件,生成.obj文件
- 链接器将所有.obj文件链接成一个可执行文件
- 头文件提供了跨编译单元的信息共享
构造函数与析构函数
-
构造函数
- 构造函数是与类同名的特殊成员函数
- 在对象创建时自动调用,确保初始化
- 可以有参数,也可以没有参数
- 成员变量可以在声明处初始化
- 也可以在构造函数的初始化列表中初始化
-
析构函数
聚合初始化
C++支持聚合初始化,可以一次性初始化多个成员:
// 数组初始化
int a[5] = {1, 2, 3, 4, 5}; // 完全初始化
int b[6] = {5}; // b[0]=5, 其余为0
int c[] = {1, 2, 3, 4}; // 大小由初始化器决定
// 结构体初始化
struct X {
int i;
float f;
char c;
};
X x1 = {1, 2.2, 'c'}; // 按顺序初始化
X x2[3] = {{1, 1.1, 'a'}, {2, 2.2, 'b'}}; // 数组的初始化
// 有构造函数的类也可以使用聚合初始化
struct Y {
float f;
int i;
Y(int a); // 构造函数
};
Y y1[] = {Y(1), Y(2), Y(3)}; // 使用构造函数初始化