类是自定义数据类型,对象是其实例;类定义模板(含私有成员变量和公有成员函数),对象占用内存并独立存储状态,通过点号调用公有接口,实现封装、复用与逻辑抽象。

类和对象是c++面向对象编程(OOP)的起点,不是语法噱头,而是组织代码、表达现实逻辑的自然方式。类是模板,对象是实例;类描述“一类事物有什么、能做什么”,对象代表“某个具体的事物”。理解这一点,比记住语法更重要。
类:你定义的全新数据类型
类不是函数集合,也不是结构体加强版——它是你亲手设计的一种数据类型,像 int 或 double 那样可声明变量,只不过这个“变量”自带数据和行为。
- 用 class 关键字定义,后面跟类名,花括号内写成员,末尾必须加分号
- 成员包括:成员变量(存状态,如 _age、_name)和 成员函数(做事情,如 printInfo()、setAge())
- 默认所有成员是 private(私有),外部不能直接访问——这是封装的第一道门
- 想让外部能用的功能,得明确标上 public;想隐藏实现细节,就放在 private 区域里
对象:类的具体化身
类本身不占内存,也不干活;只有当你“造出一个对象”,它才真实存在、拥有自己的数据空间,并能调用属于它的函数。
- 声明方式和普通变量一样:Student s1;、Box boxA, boxB;
- 每个对象都有一套独立的成员变量(比如 s1._id 和 s2._id 互不影响),但共用同一份成员函数代码
- 通过点号 . 访问 public 成员:s1.setAge(19);、boxA.getVolume();
- 如果成员是 private 的(比如 _password),外部连读都不能读——只能靠 public 函数间接操作
为什么非要分“类”和“对象”?
这不是绕弯子,而是为了解决实际问题:
立即学习“C++免费学习笔记(深入)”;
- 避免重复写相似逻辑:比如管理100个学生,不用定义100组变量+100套函数,只要1个 Student 类 + 100个对象
- 控制数据安全:把年龄设为 private,再提供 setAge() 函数,就能在内部加校验(比如禁止设负数)
- 降低维护成本:改一个类,所有对象自动受益;而面向过程改一堆散落的函数和变量,容易漏、难追踪
- 贴近人类思维:我们说“学生交作业”“老师批改”,而不是“把学号传给函数A,再把分数传给函数B”
Struct 和 class 到底啥区别?
语法上几乎一样,核心差异就一条:
- struct 默认成员是 public,适合纯数据包装(兼容C)
- class 默认成员是 private,强调封装,是面向对象的常规选择
- 两者都能定义函数、支持继承、有访问限定符——选哪个,主要看设计意图:要暴露数据就用 struct,要保护数据就用 class
基本上就这些。类与对象不是新概念,而是把“描述事物”这件事,用代码语言重新说清楚了。