封装有两个重要的优点:
-
确保用户代码不会无意间破坏封装对象的状态
-
被封装的类的具体实现细节可以随时改变,且无须调整用户级别的密码
一旦把数据成员定义成private的,类的作者就可以比较自由地修改数据了。当实现部分改变时,我们只需要检查类的代码本身以确认这次改变有什么影响;换句话说,只要类的接口不变,用户代码就无须改变。如果数据是public的,则所有使用了原来数据成员的代码都可能失效,这时我们必须定位并重写所有依赖于老版本实现的代码,然后才能到重新使用该程序。
把数据成员的访问权限设成private还有另外一个好处,这么做能防止由于用户的原因造成数据被破坏。如果我们发现有程序缺陷破坏了对象的状态,则可以在有限的范围内定位缺陷:因为只有实现部分的代码可能产生这样的错误。因此,将差错限制在有限范围内将能极大地降低维护代码及修正程序错误的难度。
来自《C++ Primer 5th》242页