0
class ABC{
     public :
      int a;
     public :
      int getData(){
        return a;
      }
     }
     void main()
     { 
       ABC abc;
       cout<< abc.a;    //1
       cout<<abc.getData();//2
     }

现在,如果我正在访问变量"a",在这种情况下编译器需要更少的时间来访问'a'. 我猜第一种情况,但不确定。

4

3 回答 3

1

这两种方法不是严格等价的:

  1. 直接访问成员会读取成员本身的值,而
  2. get 方法返回变量的副本,因此您可以从副本中读取。

关于性能当然#1应该更快,因为不涉及副本,但大多数现代编译器将应用复制省略来删除正在创建的额外副本。

相反,您应该考虑组织/机构中遵循的编码指南的一致性。

于 2013-07-24T05:56:07.383 回答
1

这都是编码风格。拥有私有成员只是一种安全措施,因此任何外部实体都无法直接访问它并对其进行修改(与声明const用作安全屏障的变量的概念相同)。公共访问器是用于访问成员值的函数,公共修饰符用于通过函数更改值。它只是编码约定。直接传递成员而不是函数会更快,因为没有复制。

于 2013-07-24T06:50:25.147 回答
0

我会这样说:

  • 如果访问器中除了简单地设置/返回变量(例如范围检查)之外还有任何其他内容,则该变量绝对应该是私有的。这是确保此附加代码实际执行的唯一方法。

  • 如果您只需要一个访问器,因为您不希望变量可查询或可设置,那么该变量也应该是私有的。

  • 我认为,如果您同时定义一个普通的 getter 和 setter,那么将变量公开并忘记访问器同样安全。无论如何,该变量实际上是公共的。在这种情况下,访问器只是冗余代码,因此不应使您的代码膨胀。稍后将公共变量设为私有很容易,因为编译器会尽职尽责地列出您需要调整的每一行代码。

简而言之:默认情况下使用私有变量,并且对您编写的每个访问器都三思而后行,因为它会在您的封装中打一个洞。

于 2013-07-24T09:54:13.897 回答