第三点非常重要,我们举个例子
class SpeedDataCollection { public: void addValue(int speed); // 添加新的数据 double averageSoFar() const; // 计算平均速度 };
这里设计了一个收集汽车速度数据的类,其中有一个计算平均速度的方法。现在有两种方法实现,第一个是用一个成员变量保存。每次更新数据就更新这个成员变量的值。第二个是动态计算,只有当调用averageSoFar方法时才会计算。
两个方法其实都OK,如果内存够大就用第一种,不够就用第二种。
但如果我们第一种用的好好的,现在内存不够了要换第二种。此时如果第一种的成员变量是公有的问题就大了。因为我们需要修改所有用到这个成员变量的地方。但如果设置为私有,外界压根就不知道我们做了修改。这就是封装性的体现。