把数据和操作打包在一起,用"对象"的方式思考程序。本章从最基础的 class 定义出发,逐步带你理解封装、继承与多态。
想象一下,你要写一个程序来管理一个班级里所有学生的信息。最开始你会定义一堆变量:name1、score1、name2、score2……然后再写一堆函数来操作这些数据。很快你就会发现,数据和函数到处都是,找起来头疼,改起来更头疼。
面向对象的核心思想就是:把属于同一个"东西"的数据和操作,打包在一起。 一个学生的名字、分数,以及"打印信息"、"修改分数"这些操作——全都放在一个叫 Student 的"类"里。这个类就像一张设计图,按照它可以批量创建很多个学生"对象"。就像有了"学生信息登记表"这个模板(类),你就可以为班上的每一位同学(对象)各自填写一张表——每张表的格式(姓名、分数怎么填)都一样,但填进去的具体内容各不相同。
virtual——来实现的,12.9 节会详细讲解。)速查
先有个印象,不需要现在全部记住——学完对应章节后再回来看,每个关键字都会变得清晰。
| 关键字 / 语法 | 作用 | 在哪学 |
|---|---|---|
| class | 定义一个类(成员默认私有) | 12.1 / 12.2 |
| struct | 结构体(成员默认公开),与 class 本质相同 | 12.1 |
| public | 公开成员,外部代码可以访问 | 12.3 |
| private | 私有成员,只有类内部能访问 | 12.3 |
| protected | 保护成员,子类也能访问,外部不能 | 12.3 / 12.8 |
| this | 指向当前对象自身的指针 | 12.2 |
| 构造函数 | 对象创建时自动执行的初始化代码 | 12.4 |
| 析构函数 ~ | 对象销毁时自动执行的清理代码 | 12.4 |
| operator | 运算符重载,让自定义类型支持 +、< 等符号 | 12.5 |
| static | 静态成员:所有对象共享同一份 | 12.7 |
| virtual | 虚函数:运行时动态决定调用哪个版本 | 12.9 |
| = 0 | 纯虚函数:子类必须实现,类本身无法实例化 | 12.10 |
struct 更适合表示简单的数据聚合——就像第十章学过的结构体,成员之间没有太多需要"藏起来"的内部逻辑;class 更适合表示带有更复杂行为和访问控制的类型——需要区分哪些是对外的接口、哪些是内部实现细节的场景。看到 struct,大致能猜到"这大概率是个简单的数据包";看到 class,则往往意味着"这里有更完整的封装设计"。知识地图
建议按顺序学习——后面的知识点都建立在前面的基础上。"基础语法"部分覆盖 CSP-J 考纲,"进阶特性"部分是拓展内容。
12.6 拷贝构造函数 与 12.7 静态成员 是独立专题,可在学完基础后按需选读。
先从"基础语法"开始,把 class 的核心用法掌握扎实,这部分是 CSP-J 必会内容。"进阶特性"部分建议在理解基础之后再学习。