条款22:将成员变量声明为 private

 将成员变量声明为 private,可赋予客户访问数据的一致性(不用费劲记忆调用时,哪些需要小括号,哪些不需要)、可精确控制访问:

class AccessLevels {
public:
    ...
    int getReadOnly() const { return readOnly; }
    void setReadWrite(int value) { readWrite = value; }
    int getReadWrite() const { return readWrite; }
    void setWriteOnly(int value) { writeOnly = value; }
private:
    int noAccess; 	// 不能访问这个int
    int readOnly; 	// 对这个int的只读访问
    int readWrite; 	// 对这个int的读写访问
    int writeOnly; 	// 对这个int的只读写访问
};

 更重要的是为了封装!!!如果你通过函数实现了对数据成员的访问,那么以后可以替换,使用者并不会察觉。将数据成员隐藏在函数接口之后可以提供各种实现灵活性。

class SpeedDataCollection {
    ...
public:
    void addValue(int speed); // 添加一个速度值
    double averageSoFar() const; // 返回平均速度
    ...
};

如何实现averageSoFar函数?

  • 在类中添加一个数据成员,记录目前为止收集到的所有速度数据的平均值。
  • 在每次调用averagesfar时重新计算它的值。
    重要的是,通过成员函数访问平均值(即通过封装它),可以交换这些不同的实现,而客户只需要重新编译。
    一旦将数据成员声明为public或protected,并且客户已经开始使用它,就很难更改有关该数据成员的任何内容。太多的代码需要重写、重新测试、重新编写文档或重新编译。
  • 将数据成员声明为私有。它为客户提供了语法上一致的数据访问,提供了细粒度的访问控制,允许强制执行不变式,并为类作者提供了实现灵活性。
  • protected并不比 public 更具封装性。
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值