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 进行授权