Effective C++ 条款22、23

此条款解决的问题,为什么成员变量不该是public,然后所有反对public成员变量的论点同样适用于protected成员变量。于是成员变应该是private。

理由一:语法一致性,public全为成员函数,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 readOnly;
	int readWrite;
	int writeOnly;
};

理由三:封装,其好处是“为所有可能的实现”提供弹性,确保class的约束是会获得维护,只有成员函数能影响成员变量。不封装意味不可以改变。

protected并不比public更具有封装性

有一个public成员变量,如果取消此变量,则所有使用它的客户码都会被破坏,而那是一个不可知的大量。因此public成员变量完全没有封装性。假设一个protected成员变量,最终取消此变量,则所有使用它的derived classes都会被破坏,而那往往也是一个不可知的大量。因此,protected成员变量就像public成员变量一样缺乏封装性。

一旦将一个成员变量声明为public或protected而客户开始使用它,就很难改变那个成员变量所涉及的一切。于是太多代码需要重写、重新测试、重新编写文档、重新编译。从封装的角度出发,其实只有两种访问权限:private(提供封装 )和其他(不提供封装)。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值