Effective C++ T22:将成员变量声明为private

38 篇文章 0 订阅
31 篇文章 2 订阅

Effective C++学习笔记总链接

改善程序与设计的55个具体做法学习笔记-每日1条


条款22:将成员变量声明为private

【技巧】

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

2. protected并不比public更具有封装性,只有private提供封装。


为啥不采用public成员变量?

1. 接口的一致性

如果成员变量不是public,客户唯一能够访问对象的办法就是通过成员函数(都是带有圆括号)。
而如果成员变量是public,客户就得迷惑的记住是否该使用圆括号

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

如果你令成员变量为public,每个人都可以读写它。

而使用函数,你可以做到“不准访问”、“只读访问”、“读写访问”以及“惟写访问”,并且如此细微地划分访问控制十分有必要

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 无任何访问动作
	int readOnly; // 对int 只读访问
	int readWrite; // 对int 读写访问
	int writeOnly; // 对int 惟写访问
};

3. 封装可以使“所有可能的实现”提供弹性

如果你通过函数访问成员变量,日后可改某个计算替换这个成员变量,而class客户一点也不会知道class的内部实现变化。

如果你对客户隐藏成员变量(也就是封装它们),可以确保class的约束条件总是会获得维护的。保留了日后变更实现的权利。

public意味不封装,不封装意味不可改变,特别是对被广泛使用的class而言。

被广泛使用的class最需封装的一个族群,它们能够从“改采用一个较佳实现版本”中获益。

只有private提供封装性

虽然protected也具有语法一致性、细微划分之访问控制。但不具有封装性

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

假设我们有个public 变量,而我们最终取消了它,所有使用它的客户码都会被破坏。
假设我们有个protected变量,取消它之后,所有使用它的derived class 都会被破坏。

因此,protected和public一样缺乏封装性,如果成员变量被改变,都会有不可预知的大量代码受到破坏。

只有两种访问权限:private(提供封装)和其他(不提供封装)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值