C++中struct与class仅默认访问权限和默认继承方式不同,其余完全一致:struct成员和继承默认public,class默认private;语义上struct多用于纯数据聚合,class用于抽象封装。

在C++中,struct 和 class 的核心只有**默认访问权限和默认继承方式不同**,其余语法、功能、内存布局、性能表现完全一致。面试时若答“struct只能存数据、class才能封装”或“struct不能有函数”等,属于对C++的误解。
默认访问权限不同
这是最常被问到、也最容易忽略的关键点:
- struct 成员默认是 public
- class 成员默认是 private
例如:
struct S { int x; void f() {} }; // x 和 f 都是 public
class C { int y; void g() {} }; // y 和 g 都是 private
一旦显式写了 public:、private: 或 protected:,这个默认规则就失效了——两者行为完全相同。
立即学习“”;
默认继承方式不同
当不写继承关键字时:
- struct 默认是 public 继承
- class 默认是 private 继承
比如:
一站式AI创作平台,免费AI图片和视频生成。
16094 struct B {}; struct D : B {}; // 等价于 struct D : public B {}
class B {}; class D : B {}; // 等价于 class D : private B {}
实际开发中几乎都会显式写出继承方式(尤其是 public),所以这点影响很小,但面试官可能用来考察细节掌握程度。
语义习惯与团队约定
语言层面没限制,但行业普遍形成以下约定俗成的用法:
- 用 struct 表示“纯数据聚合”,侧重值语义、无复杂逻辑、通常可直接初始化(如
{1, "abc"})、常用于POD类型或与C兼容 - 用 class 表示“抽象类型”,强调封装、隐藏实现、提供接口、有构造/析构/操作符重载等完整行为
注意:这不是强制规则。你可以用 struct 实现完整类(含私有成员、虚函数、模板等),也可以用 class 做纯数据结构——编译器都允许,只是违背直觉、降低可读性。
其他常见误区澄清
以下说法都是错误的:
- “struct 不能有成员函数” → 错,struct 可以定义构造函数、普通成员函数、甚至虚函数
- “struct 不能继承” → 错,struct 支持单继承、多继承、虚继承,和 class 完全一样
- “struct 分配在上,class 分配在堆上” → 错,内存位置取决于定义方式(局部变量/全局/static/new),与 struct/class 关键字无关
- “struct 比 class 快” → 错,生成的汇编和运行时开销无任何差异
本质上,C++ 标准把 struct 和 class 视为同一机制的两种拼写方式,仅在上述两个默认行为上有区别。
基本上就这些。记住:区别小,但面试常考;用法上靠习惯,而非语法限制。
以上就是++中struct和class的_c++结构体与类的选择【面试题】的详细内容,更多请关注php中文网其它相关文章!
微信扫一扫打赏
支付宝扫一扫打赏
