文章

C++ 结构体struct

C++ 结构体struct

C++与C的结构体区别

对比项C 语言中的 structC++ 中的 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++ 中 structclass 唯一语法区别是默认访问级别(public vs private

structclass

struct 成员默认为publicclass成员默认为private,除此之外,structclass 功能完全相同

在C++中,struct 可以看作是 默认公开的 class

本文由作者按照 CC BY 4.0 进行授权