Effective C++之条款22:将成员变量声明为private

声明:

  1. 文中内容收集整理自《Effective C++(中文版)第三版》,版权归原书所有。
  2. 本内容在作者现有能力的基础上有所删减,另加入部分作者自己的理解,有纰漏之处敬请指正。

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

Declare data members private.

如果成员变量不是public,那么客户唯一能访问对象的办法就是通过成员函数。

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

一个大口径武器:封装! 

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

将成员变量隐藏在函数接口之后,可以为“所有可能的实现”提供弹性。

封装的重要之处在于,如果我们对用户隐藏成员变量(即封装),我们就可以确保class的约束条件总是会得到约束,因为只有成员函数可以影响它们。同时你也保留了日后变更实现的权利。如果我们不隐藏它们,即使拥有class原始码,改变任何public事物的能力还是极端受到束缚的,因为这样会破坏太多原始码。

public意味着不封装,而不封装意味着不可改变。被广泛使用的classes是最需要封装的一个族群。

而对于protected成员变量,其封装性并非高于public成员变量。

  • 假设我们有一个public成员变量,而我们最终取消了它,那么所有使用它的客户码都会被破坏!即public成员变量完全没有封装性。
  • 假设我们有一个protected成员变量,而我们最终取消了它,那么所有使用它的derived classes都会被破坏!即protected成员变量像public成员变量一样缺乏封装性。

从封装的角度看,其实只有两种访问权限:private(提供封装)和其他(不提供任何封装)。

请记住:

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

猜你喜欢

转载自blog.csdn.net/longmenshenhua/article/details/88937330
今日推荐