22:将成员变量声明为private

一、为什么成员变量不能是public

1.用户不必区分public接口内的哪些是函数,哪些是变量

若成员变量不是public,则用户唯一能访问对象的办法就是通过成员函数。

若public接口内的每样东西都是函数,则用户就不必记忆哪些是函数,哪些是变量。

2.可以对成员变量进行读写控制 

使用函数可以让你对成员变量的处理有更精确的控制。

若你令成员变量为public,则每个人都可以读写它,但若你以函数取得或设定其值,你就可以实现出“不准访问”、“只读访问”以及“读写访问”。

3.可以进行封装

将变量声明为private的另一个好处是可以进行封装。

若你通过函数访问成员变量,日后可改以某个计算替换这个成员变量,而class用户一点也不会知道class内部实现已经起了变化。 

二、为什么成员变量不能是protected

protected成员变量的封装性并不高过public成员变量。

成员变量的封装性与“成员变量的内容改变时所破坏的代码数量”成反比。

假设我们有一个public成员变量,而我们最终取消了它。多少代码可能会被破坏?所有使用它的客户码都会被破坏。因此public成员变量完全没有封装性。

假设我们有一个protected成员变量,而我们最终取消了它,有多少代码被破坏?所有使用它的derived class都会被破坏。因此,protected成员变量就像public成员变量一样缺乏封装性,因为在这两种情况下,若成员变量被改变,都会有不可预知的大量代码受到破坏。

三、总结 

1.切记将成员变量声明为private。这可赋予客户访问数据的一致性、可细微划分访问控制、允诺约束条件获得保证,并提供class作者以充分的实现弹性。

2.protected并不以public更具封装性。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值