【C++】005、struct与class的区别

📅 2026/6/27 3:06:32
【C++】005、struct与class的区别
一、语法区别在C中struct与class除了默认访问权限和默认继承权限不同其他功能都完全等价对比structclass成员默认访问权限public公开private私有继承默认访问权限public公有继承private私有继承代码struct S { int a; }; // a 默认 public class C { int b; }; // b 默认 private struct D1 : S { }; // 默认 public 继承S的public成员仍是public class D2 : S { }; // 默认 private 继承S的public成员变成private除了上面两点不同外包括成员构造函数析构函数运算符重载模版参数和继承多态等都一样注意在C语言中struct没有函数他只是数据集合体二、struct与class在工程中的使用场景使用场景推荐用 struct推荐用 class纯数据容器/PODPlain Old Data✅ 比如 Point{int x, y;}、RGBColor{uint8_t r,g,b;}❌ 过度设计没有私有成员、没有复杂行为✅ 仅用来聚合数据不包含逻辑❌有复杂业务逻辑/封装/多态❌ 容易误导阅读者✅ 体现面向对象设计需要访问控制private/protected❌ 虽然可以写但语义不符✅C语言兼容的头文件✅ 必须用structC语言没有class❌ C编译器不识别总结当你只想把数据包在一起时用struct当你想构建一个具有不变量的对象时用class代码// ✅ 好struct 表示纯粹的数据聚合 struct Vec3 { float x, y, z; }; // ✅ 好class 表示有约束的实体对象 class BankAccount { private: double balance; // 必须 0有业务约束不变量 public: void deposit(double amount) { /* 校验逻辑 */ } void withdraw(double amount) { /* 校验逻辑 */ } };三、底层本质在汇编代码层面struct与class没有任何区别都是类类型编译器只关心成员的偏移量和类型C要保留struct是为了C语言的向后兼容四、模版参数C中struct不能作为模板的template的类型参数只能使用class或typename引入类型参数五、struct在C与C语言中的区别在C语言中struct只包含数据没有成员函数也无继承等相关功能但在C语言中struct已经是具备了class类的能力了