您的位置 首页 编程知识

c++中struct和class的区别_c++结构体与类的选择【面试题】

C++中struct与class仅默认访问权限和默认继承方式不同,其余完全一致:struct成员和继承默认pu…


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

c++中struct和class的区别_c++结构体与类的选择【面试题】

在C++中,structclass 的核心只有**默认访问权限和默认继承方式不同**,其余语法、功能、内存布局、性能表现完全一致。面试时若答“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图片和视频生成。

c++中struct和class的区别_c++结构体与类的选择【面试题】 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中文网其它相关文章!

相关标签:

大家都在看:

本文来自网络,不代表四平甲倪网络网站制作专家立场,转载请注明出处:http://www.elephantgpt.cn/17246.html

作者: nijia

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

联系我们

18844404989

在线咨询: QQ交谈

邮箱: 641522856@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部