Effective C++条款22:设计与声明——将成员变量声明为private

一、不要把成员变量声明为public

统一性

  • 如果成员变量不是public,那么客户端只能通过函数来对成员变量进行操作
  • 通过函数来操作类这也是一个标准,很多面向对象语言都是这么设计的
 
  1. class AccessLevels

  2. {

  3. public:

  4. int getReadOnly()const { return readOnly; }

  5. void setReadWrite(int value) { readWrite = value; }

  6. int getReadWrite()const { return readWrite; }

  7. void setWriteOnly(int value) { writeOnly = value; }

  8. private:

  9. int noAccess; //外部不能进行任何操作

  10. int readOnly; //外部只读

  11. int readWrite; //外部可读可写

  12. int writeOnly; //外部只写

  13. };

封装性

  • 将成员变量隐藏在接口的背后,可以为“所有可能的实现”提供弹性
  • 封装性也可以对成员变量进行保护

二、最好也不要把成员变量声明为protected

  • protected的论点与上面的其实也十分类似

protected的封装性不一定有public好

  • 条款23将会介绍到,成员变量的封装性与“成员变量的内容改变(改变就是指移除)时所破坏的代码数量成反比”。也就是说封装性越好,成员变量改变时破坏的代码就越少
    • 如果我们把成员变量声明为public,那么当我们把成员变量移除的时候,程序中很多的代码就会被破坏(封装性差,破坏性强)
    • 如果我们把成员变量声明为protected,那么当我们在基类中把这个成员变量移除的时候,那么很多使用到这个成员变量的派生类将会出错(封装性差,破坏性强)
  • 因此,看起来,protected不一定比public的封装性好

三、总结

  • 切记将成员变量声明为private。这可赋予客户访问数据的一致性、可细微性划分访问控制、允许约束条件获得保证,并提供class作者以充分的实现弹性
  • protected并不比public更具封装性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值