封装是C++面向对象编程的核心思想,通过public、private、protected访问控制实现数据与方法的捆绑及有选择地暴露接口,建立清晰责任边界并保障数据一致性。

封装是C++面向对象编程的核心思想之一,本质是把数据(属性)和操作数据的函数(方法)捆绑在一起,并对外隐藏实现细节,只暴露必要的接口。访问权限控制(public、private、protected)就是实现封装的关键机制。
封装不是“不让人看”,而是“有选择地暴露”
封装的目的不是彻底封锁内部,而是建立清晰的责任边界:类内部负责保证数据的有效性和一致性,外部只能通过约定好的方式交互。比如一个BankAccount类,余额balance应为private,但提供deposit()和withdraw()两个public方法——这样类就能在存取时自动校验金额是否合法,避免外部直接赋值导致数据错误。
C++三大访问限定符的实际作用范围
public:成员可被任何地方访问(类内、同类对象、派生类、类外代码)
private:仅允许在本类内部访问(包括友元),类外和派生类都不可见
protected:允许本类及派生类访问,但类外不可见
- 默认情况下,class的成员是private;struct的成员是public
- 继承时的访问级别(如class D : protected B)会影响基类成员在派生类中的可见性,需与成员自身限定符叠加判断
- 友元(friend)可突破private/protected限制,但应谨慎使用,避免破坏封装边界
封装常被忽略的关键细节
封装不只是加个private就完事。真正有效的封装还需配合设计习惯:
- 优先把成员变量设为private,哪怕暂时没做校验逻辑,也为后续扩展留出空间
- getter/setter方法不等于“暴露全部”,可在setXXX()中加入参数检查、触发通知、懒加载等逻辑
- 把辅助函数(如验证、格式化)设为private或protected,避免污染公共接口
- 用const修饰不修改状态的public成员函数(如getBalance() const),既提升安全性,也支持对const对象调用
基本上就这些。封装不是语法技巧,而是设计意识——用访问控制划定信任边界,让类成为可靠、可维护、可演化的独立单元。
立即学习“C++免费学习笔记(深入)”;










