条款22:将成员变量声明为private
2014-05-30 13:07
190 查看
条款22:将成员变量声明为private
语法一致性
如果所有的函数都是public,所有的成员都是private,那么客户访问类成员时就不需要是否要加()。
对成员变量的精准控制
如果成员变量是public,那么所有的人都可以操作它,那么程序可能会出现意外的结果,但通过成员函数访问它,可以对其控制。
提供封装
提供函数访问成员,对于该成员的计算逻辑可以封闭。
实现书中的例子,速度自测程序
对于成员变量的封装性非常重要,这可以确保类的约束条件总是会得到保护,因为只有成员函数影响他们,public意味着不封装,不封装会导致破坏客户代码。
对于protected成员变量的论述跟public一致。
假如类有个public成员变量,而取消了它,那么所有使用到他的客户代码都会受到影响,如果有个protected成员变量也取消它,那么所有使用它的derived class都会受到破坏。
记住
①切记将成员变量声明为private。这可赋予客户访问数据的一致性、可细微划分访问控制、允许约束条件获得保证,并提供class作者以充分的实现弹性。
②Protected并不比public更具有封装性。
语法一致性
如果所有的函数都是public,所有的成员都是private,那么客户访问类成员时就不需要是否要加()。
对成员变量的精准控制
如果成员变量是public,那么所有的人都可以操作它,那么程序可能会出现意外的结果,但通过成员函数访问它,可以对其控制。
class AccessLevels { public: int GetReadOnly() const {return m_readOnly;} void SetWriteOnly(const int v) {m_wirteOnly = v;} void SetReadWrite(const int v) {m_readWrite = v;} int GetReadWrite() {return m_readWrite;} private: int m_noaccess; //不能访问 int m_wirteOnly; //只写 int m_readOnly; //只读 int m_readWrite; //可读写 };
提供封装
提供函数访问成员,对于该成员的计算逻辑可以封闭。
实现书中的例子,速度自测程序
class SpeedDataCollection { public: SpeedDataCollection() : m_avg(0.0), m_amout(0), m_count(0) {} void AddValue(const int v) { m_amout += v; m_avg = m_amout / (++m_count); } double GetAverage() const {return m_avg;} private: double m_avg; int m_amout; int m_count; };实现对m_avg数据的封装,通过函数接口获取,而m_avg的计算逻辑客户并不知情。
对于成员变量的封装性非常重要,这可以确保类的约束条件总是会得到保护,因为只有成员函数影响他们,public意味着不封装,不封装会导致破坏客户代码。
对于protected成员变量的论述跟public一致。
假如类有个public成员变量,而取消了它,那么所有使用到他的客户代码都会受到影响,如果有个protected成员变量也取消它,那么所有使用它的derived class都会受到破坏。
记住
①切记将成员变量声明为private。这可赋予客户访问数据的一致性、可细微划分访问控制、允许约束条件获得保证,并提供class作者以充分的实现弹性。
②Protected并不比public更具有封装性。
相关文章推荐
- 条款22 :将成员变量声明为private
- Effective C++:条款22:将成员变量声明为private
- effective c++条款21,22,23(返回对象时,别妄想反回其引用,将成员变量声明为private,宁可拿非成员非友元函数替换成员函数(增强封装性))
- Effective C++——》条款22:将成员变量声明为private
- 条款22、将成员变量声明为private
- 条款22:将成员变量声明为private
- 条款22:将成员变量声明为private(Declare data members private)
- 条款22:将成员变量声明为private
- 条款22:将成员变量声明为private
- Effective C++:条款22:将成员变量声明为private
- Effective C++ -----条款22:将成员变量声明为private
- 条款22:将成员变量声明为private
- effective C++ 条款 22:将成员变量声明为private
- 《Effective C++》学习笔记条款22 将成员变量声明为private
- 条款22:将成员变量声明为private
- 读书笔记《Effective c++》 条款22 将成员变量声明为private
- 条款22 将成员变量声明为private
- 读书笔记《Effective C++》条款22:将成员变量声明为private
- 条款22:将成员变量声明为private
- Effective C++ 条款22 将成员变量声明为private