struct和class的核心区别在于默认访问权限与继承方式:struct默认public成员和public继承,适合数据聚合;class默认private成员和private继承,适合封装与面向对象设计。

在C++中,struct和class本质上非常相似,都可以包含数据成员、成员函数、构造函数、析构函数、支持继承和多态。它们最核心的区别在于默认的访问控制和默认的继承方式。
默认访问权限不同
这是struct和class最直观的区别:
- 在struct中,成员默认是public的。
- 在class中,成员默认是private的。
例如:
struct MyStruct {int x; // 默认 public
};
class MyClass {
int x; // 默认 private
};
这意味着在不显式声明访问修饰符的情况下,struct更适合用于定义公开数据集合,而class更适用于封装内部实现细节。
立即学习“C++免费学习笔记(深入)”;
默认继承方式不同
当使用继承时,两者的默认行为也不同:
- struct继承默认是public继承。
- class继承默认是private继承。
例如:
struct Base {};struct Derived : Base {}; // 等价于 public Base
class Base2 {};
class Derived2 : Base2 {}; // 等价于 private Base2
这会影响派生类能否通过公共接口访问基类成员。
使用场景与编程习惯
虽然语法上差异很小,但程序员通常根据语义选择使用struct还是class:
- struct常用于数据聚合:比如表示坐标点、配置参数、简单的数据容器(POD类型,Plain Old Data)。强调“这个类型主要用来存数据”,不强调行为或封装。
- class常用于面向对象设计:包含私有成员、提供公有接口、支持封装、继承和多态。适合构建复杂对象模型。
举例来说:
// 数据结构用 structstruct Point {
double x, y;
};
// 对象行为用 class
class Circle {
private:
Point center;
double radius;
public:
double area();
void draw();
};
其他注意事项
- C++中struct也可以有构造函数、析构函数、成员函数、静态成员、操作符重载等,功能完全不弱于class。
- 模板中两者无区别,都可以作为类型参数使用。
- 从兼容性角度,struct更接近C语言风格,如果需要与C代码交互,通常使用struct。
基本上就这些。关键不是语法能力,而是语义表达:用struct表达“这是一个数据包”,用class表达“这是一个有行为的对象”。选择哪个,更多体现的是设计意图和团队编码规范。











