C++ 类、对象与访问控制基础
用一个最小示例区分 class 与 struct 的默认访问权限,并说明 public、private、protected 和继承的接口边界。
- 问题
- 用一个最小示例区分 class 与 struct 的默认访问权限,并说明 public、private、protected 和继承的接口边界。
- 环境
- C++ · 面向对象 · class · struct
- 状态
- 待发布
- 首次发布
- 2026年4月7日
- 最后更新
- 2026年8月10日
- 预计阅读
- 2 分钟
生命周期说明(2026-08-10):本文由 2026 年的入门学习记录整理而来,保留基础概念与可验证示例。它不覆盖资源管理、模板、并发或现代 C++ 的完整工程实践;涉及具体语言版本时,应以当前编译器和标准文档为准。
class 与 struct
两者都能定义数据成员、成员函数、构造函数和继承关系。最常用的区别是默认访问权限:
class的成员和基类默认是private;struct的成员和基类默认是public。
因此,单纯承载公开数据的类型常使用 struct;需要明确封装边界的类型常使用 class。这只是约定而不是硬性规则。
struct Point { int x = 0; // 默认 public int y = 0;};
class Counter { int value_ = 0; // 默认 private
public: void increment() { ++value_; } int value() const { return value_; }};
int main() { Point point{1, 2}; Counter counter; counter.increment(); return point.x + counter.value();}访问说明符
public、private 和 protected 定义的是源码层面的访问边界:
public成员构成类型对外提供的接口;private成员只能由该类的成员函数和友元直接访问;protected成员可由该类及其派生类访问,但不能由普通外部代码直接访问。
访问控制有助于防止调用方依赖内部表示。例如,Counter 可以把 int 换成其他实现,而只要 increment() 与 value() 的契约不变,调用方通常不需要修改。
访问控制不是运行时安全机制,也不能替代输入校验、权限控制或线程同步。
继承时的可见性
继承方式会影响基类的 public 与 protected 成员在派生类接口中的可见程度:
public继承通常表示“派生类是一种基类”,基类的公开接口仍保持公开;protected与private继承会分别收紧这些成员对外的可见性;- 不论使用哪种继承方式,基类的
private成员都不能被派生类直接访问。
是否使用继承应从替换关系和接口设计出发。仅为复用实现时,组合往往比继承更容易控制依赖边界。
下一步
在掌握访问控制后,可继续练习构造与析构、const 成员函数、资源所有权,以及用编译器警告和小型测试验证接口约束。网络程序中的对象生命周期与错误处理可参阅本站的 Linux TCP Socket 基础。