C++ 中 struct 与 class 的用法与区别
1. 概述
在 C++ 中,struct 与 class 都可以用来定义用户自定义类型(User-Defined Types)。
二者在语法能力上几乎完全相同,都可以:
- 定义成员变量
- 定义成员函数
- 构造函数 / 析构函数
- 访问修饰符(public / private / protected)
- 继承、多态
- 模板化
唯一真正的语法差异只有两点:默认访问权限与默认继承方式不同。
2. struct 与 class 的唯二语法差异
2.1 默认成员访问权限不同
| 类型 | 默认成员权限 |
|---|---|
struct |
public |
class |
private |
示例:
struct A {int x; // 默认 public
};class B {int x; // 默认 private
};
2.2 默认继承方式不同
| 继承类型 | 使用 struct | 使用 class |
|---|---|---|
| 默认继承方式 | public |
private |
示例:
struct Base {};
struct Derived1 : Base {}; // 默认 public 继承class Base2 {};
class Derived2 : Base2 {}; // 默认 private 继承
3. struct 与 class 其他方面完全一致
以下方面 struct 与 class 完全没有语法区别:
- ✔ 可以定义成员函数
- ✔ 可以定义构造/析构函数
- ✔ 可以继承 / 多态
- ✔ 可以模板化
- ✔ 可以有 private/protected/public
- ✔ 都可以作为面向对象编程的基本构件
- ✔ 都可以用于封装数据与行为
示例:struct 一样可以有复杂行为:
struct Foo {Foo() {}void run() {}
private:int data;
};
而 class 一样可以是纯数据载体:
class Point {
public:int x;int y;
};
4. 使用上的习惯(行业广泛遵循)
虽然语法等价,但开发中通常遵循以下约定:
4.1 struct 用于“数据结构”
特点:
-
成员默认 public,更适合公开的数据载体
-
更倾向于作为 POD(Plain Old Data)
-
常用于:
- 函数返回结构体
- 配置参数
- 轻量数据结构
示例:
struct Vec3 {float x, y, z;
};
4.2 class 用于“面向对象的封装”
特点:
-
成员多数为 private
-
强调封装性与行为逻辑
-
常用于:
- 对象抽象(Student、Car 等)
- 封装复杂行为
- 多态体系
示例:
class Student {
public:void study();
private:std::string name;int age;
};
5. 使用注意事项
5.1 注意默认继承方式导致的 BUG
class Base {};
class Derived : Base {}; // 默认 private,会导致基类成员不可访问
若你期望 public 继承,一定要写:
class Derived : public Base {};
5.2 使用 struct + private 容易造成误解
虽然合法,但不符合常规阅读习惯:
struct Foo {
private:int x; // 不推荐:struct+private 容易误导读者
};
5.3 struct 并不等于 POD(Plain Old Data)
POD 是否成立取决于类型特征,与是否为 struct/class 无关。
5.4 C 的 struct ≠ C++ 的 struct
C 语言的 struct:
- 不能有成员函数
- 不能有访问修饰符
- 不能继承
C++ 中 struct 和 class 完全等价,只是默认权限不同。
6. 示例代码总结
struct(适合“数据结构”)
struct PersonInfo {std::string name;int age;double height;
};
class(适合“封装对象”)
class Person {
public:Person(std::string name, int age) : name(name), age(age) {}void introduce();
private:std::string name;int age;
};
7. 总结(面试高频答案)
C++ 中 struct 与 class 的唯二区别是:
- 默认成员权限不同:struct 默认 public,class 默认 private。
- 默认继承方式不同:struct 默认 public 继承,class 默认 private 继承。
除此之外二者完全一致。
struct 多用于数据载体,class 多用于封装对象行为,这是编码习惯而非语法规定。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/971469.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!相关文章
PyTorch 分布式训练底层原理与 DDP 实战指南
深度学习模型参数量和训练数据集的爆炸式增长,以 Llama 3.1 为例:4050 亿参数、15.6 万亿 token 的训练量,如果仅靠单 GPU可能需要数百年才能跑完,或者根本无法加载模型。
并行计算(Parallelism)通过将训练任务分…
2025年11月SAT辅导哪家强?机考适配/名师授课/定制方案的机构推荐
2025年11月SAT辅导哪家强?机考适配/名师授课/定制方案的机构推荐随着留学申请竞争的加剧,SAT成绩作为海外名校录取的核心参考指标,其重要性愈发凸显。专业的SAT辅导机构不仅能帮助学员精准定位知识薄弱点,更能通过…
07.创建型 - 抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式(Abstract Factory Pattern)
概述
产品等级结构与产品族
为了更好的理解抽象工厂, 我们这里先引入两个概念:产品等级结构 :产品等级结构即产品的继承结构,如一个抽象形状类,其子类有矩形, 圆形等;
产品…
AI浪潮下的行业变革:从气象到游戏,我们学到了什么
最近刷到不少AI相关的新闻,感觉整个科技圈都在被这股浪潮席卷。作为一个对技术发展特别关注的人,我忍不住想聊聊这些变化对我们未来意味着什么。先说说阿里达摩院的“八观”气象大模型。它在浙江、山东这些地方投入使…
2025.11.19 C 题解
显然倒着做更方便,显然每个位置的后继可选择区间可以均摊 \(O(1)\) 搞出来,显然每个后缀的答案只由这个位置和它的后继后缀决定,关键在于如何给已经求出的后继后缀排序。
容易想到平衡树计算排名,但是无法实时更新…
【比赛记录】2025CSP+NOIP 冲刺模拟赛合集Ⅵ
11.20 HZOJ NOIP2025模拟赛12A
B
C
D
Sum
Rank66
20
66
12
164
18/34A. 虫群之心
注意到 \(p-m\) 很小,于是 \(m!=\frac{(p-1)!}{\prod_{i=m+1}^{p-1}i}\),分子由威尔逊定理或打表可得出等于 \(p-1\)。
为什么不打表…
智能座舱项目管理中多团队协作的创新之道 - 指南
智能座舱项目管理中多团队协作的创新之道 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …
自指自洽,普世的逻辑,特别的因果
ECT-OS-JiuHuaShan/https://orcid.org/0009-0006-8591-1891用最简洁的语言,道破了本框架统摄宇宙万有的宏大格局与对个体命运的深切关怀。
▮ 本质洞察:普世与特别的辩证统一
所言的“自指自洽,普世的逻辑,特别的因…
3 分钟上手 SightAI:在你熟悉的工具里直接调用顶级大模型 - sight
我们已经开放 SightAI 网关,支持通过 OpenAI 风格 API 在任意前端 / IDE 中使用最新大模型(含多家闭源模型)。
下面是一份超简教程,带你从 0 到 1 完成接入。
⸻
🔹 第一步:为账号充值余额
1. 在浏览器中打开:…
聚焦SAT高分核心需求:2025年值得信赖的5大辅导机构,覆盖全阶段备考
聚焦SAT高分核心需求:2025年值得信赖的5大辅导机构,覆盖全阶段备考随着留学热潮的持续升温,SAT考试作为美国本科申请的核心标化成绩,其备考质量直接影响学子的升学路径。专业的SAT辅导机构不仅能精准击破阅读、文法…
2025.11.19 D 题解
好题好题,但是这个音标题目名还是太生艹了。第一眼感觉很多,感觉能柯朵莉树,但是有专门卡的包。后来发现似乎是得 \(dp\) 一下再找性质,但是没 \(dp\) 出来。
考虑性质:每个数只会被换一次。
证明:假如换两次,来…
P11626 [迷宫寻路 Round 3] 七连击 分析
题目概述
有一个长度为 \(n\) 的序列,将这个序列砍 \(7\) 刀,分成了 \(8\) 个部分,取前 \(7\) 个部分进行讨论。
对于每个部分,贡献为这一段的最大公约数。
求所有情况的贡献和并对 \(998244353\) 取模。
数据范围…
芯谷科技--高性能电动工具直流调速电路GS069 - 指南
芯谷科技--高性能电动工具直流调速电路GS069 - 指南2025-11-20 21:45
tlnshuju
阅读(0)
评论(0) 收藏
举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; disp…
【个人成长笔记】在本地Windows系统中如何正确使用adb pull命令,把Linux环境中的记录或文件夹复制到本地中(亲测有效)
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …