C++ 结构体struct
C++ 结构体struct
C++与C的结构体区别
| 对比项 | C 语言中的 struct | C++ 中的 struct |
|---|---|---|
| 定义目的 | 用来聚合不同类型的数据(数据集合) | 除了聚合数据,还能定义行为(方法、构造、继承等) |
| 使用方法 | 定义变量时必须添加struct关键字,如struct A a; | 可以不用添加struct |
| 与函数重名 | 若结构体的名字与函数名相同,可以正常运行且正常的调用 | 若结构体的名字与函数名相同,使用结构体,只能使用带struct定义 |
| 成员访问权限 | 所有成员默认是 public(并且只能是 public) | 默认也是 public,但可以使用 private / protected |
| 能否包含函数 | ❌ 不允许包含成员函数(C89/C99) | ✅ 可以包含成员函数(包括构造函数、析构函数、运算符重载等) |
| 能否包含静态成员 | ❌ 不可以 | ✅ 可以有 static 成员变量与静态函数 |
| 能否继承 | ❌ 不支持继承 | ✅ 支持继承(与 class 相同) |
| 能否有构造函数 / 析构函数 | ❌ 不支持 | ✅ 支持 |
能否使用访问控制关键字 (public / private / protected) | ❌ 不支持 | ✅ 支持 |
| 默认继承权限 | 不适用 | struct 默认是 public 继承(class 默认是 private 继承) |
| 能否作为模板参数使用 | ✅ 可以(作为类型) | ✅ 可以(同类) |
| 声明变量时的语法 | 必须加 struct 关键字(除非用 typedef) | 不需要加 struct,可直接使用 |
| 能否自引用(递归结构) | ✅ 可以(必须用指针) | ✅ 可以 |
| 与 class 的区别 | C 中无 class 概念 | C++ 中 struct 与 class 唯一语法区别是默认访问级别(public vs private) |
struct与class
struct 成员默认为public,class成员默认为private,除此之外,struct 和 class 功能完全相同。
在C++中,struct 可以看作是 默认公开的 class。
本文由作者按照 CC BY 4.0 进行授权