核心区别(一句话概括)
1.Struct vs Class : 唯一的区别在于 默认的访问权限 不同。 struct 默认是 public 的,而 class 默认是 private 的。
2.Union vs Struct / Class : 最大的区别在于 内存分配方式 。 union 的所有成员共享同一块内存空间,而 struct / class 的每个成员都有自己独立的内存空间。
2. 详细异同点
可以像下面这样,用一个表格来清晰地对比:
3. 使用场景和思想(体现你的理解深度)63.......
-
什么时候用 Struct ?
- 当你只是想把一堆数据 打包 在一起,作为一个整体来传递或使用时。
- 当你希望这些数据默认是对外 公开 的,不需要复杂的封装和权限控制时。
- 思想 :它更偏向于C语言的思维,是一个“数据集合”。例如,定义一个点的坐标 struct Point { float x; float y; }; 。
-
什么时候用 Class ?
- 当你不仅要打包数据,还要提供操作这些数据的**方法(函数)**时。
- 当你需要对内部数据进行 保护 ,不希望外部随意修改,需要实现 封装、继承、多态 等面向对象特性时。
- 思想 :它是C++面向对象的基石,强调的是“抽象”和“封装”,将数据和行为绑定在一起,形成一个有机的“对象”。例如,一个“文件读写类”,它有文件路径、读写位置等私有数据,同时提供 open() , read() , write() 等公有方法。
-
什么时候用 Union ?
- 场景1:节省内存。 当你有一组变量,但在任何时刻你都 确定只会使用其中一个 时。比如,一个图形对象,它要么是圆形(需要半径),要么是矩形(需要长和宽),可以用 union 来存储这些尺寸,因为一个图形不可能同时既是圆又是矩形。
- 场景2:类型双关 (Type Punning)。 当你想用一种数据类型的位模式来查看另一种数据类型时。这是一个比较底层的技巧,比如想看看一个 float 类型的二进制表示在 int 类型下是什么样的。
-
总结一下对面试官说的话:
-
“ Struct 和 Class 在功能上几乎是等价的,唯一的区别就是默认访问权限, Struct 是 public , Class 是 private 。在实践中,我们通常用 Struct 来表示纯粹的数据集合,用 Class 来表示具有复杂行为和封装需求的对象。
-
而 Union 则完全不同,它的核心在于内存共享,所有成员共用一块内存,大小由最大的成员决定。这使得它非常节省空间,但同一时间只能有效地使用它的一个成员。它主要用于节省内存或一些底层类型转换的特殊场景。”
-