面向深入理解语义、语法细节、初始化行为、内存模型、比较运算符重载、仿函数、模板配合 STL 等进阶应用。

一句话速记:除了默认访问/继承权限不同,structclass 在语言层面几乎等价;如何选用主要是“语义约定”问题:公开数据聚合=struct,封装不变式=class

速查表(TL;DR)

项目 struct class 备注
默认成员访问 public private 显式写访问修饰符可统一行为
默认继承方式 public private struct Derived : Base == public 继承
聚合初始化倾向 常用 不限 只与成员/构造等规则相关,与关键字无本质关系
封装语义 数据聚合、POD 风格 抽象类型、封装不变式 社区约定,不是语法限制
模板元编程标签 常用 可用 小型标签/traits常用 struct
STL 仿函数 常用 可用 历史沿用 struct comparator { ... };
友元/运算符 支持 支持 完全等价

你可在任何地方把 struct 换成 class(并补访问限定),语义一样。

struct & class 基本语法差异

默认访问权限

struct S {
    int x;   // 默认 public
};

class C {
    int x;   // 默认 private
};

等价于:

class C {
private:
    int x;
};

默认继承权限

struct Base { int x; };
struct D1 : Base {};   // 等价于 `struct D1 : public Base {}`

class D2 : Base {};    // 等价于 `class D2 : private Base {}`

其余:完全等价

访问控制 & 继承控制细节

访问控制关键字:public, protected, private

struct S {
    int a;              // public
private:
    int b;              // private
protected:
    int c;              // protected
};

继承:

struct B { int a; };
struct D_pub  : B {};            // public 继承(因 struct)
struct D_priv : private B {};    // 显式 private 继承
class  C_def  : B {};            // private 继承(因 class)
class  C_pub  : public B {};     // 显式 public