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更具封装性。 

你可能感兴趣的:(effective,C++读书笔记,c++)