2013-07-24 25 views
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'时间。 我想第一个案例,但不知道。访问类的变量通常或者通过函数

+1

这两者不相等。该函数为您提供数据成员'a'的*副本*。 – juanchopanza

+1

'void main'不合法。使用'int main'。 – chris

回答

1

这两种方法是不完全等同:

  1. 直接访问成员读取构件本身的价值,同时
  2. get方法返回变量的副本,让你从副本读这样。

关于课程#1的表现应该更快,因为不涉及任何复制,但大多数现代编译器将应用复制elision来删除正在创建的额外副本。

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

+0

我不认为copy elision可以在这里适用,但“如果”规则将允许在正确的情况下不能复制。 – juanchopanza

1

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

0

我会把这样的:

  • 如果有比简单的设置/返回变量(如范围检查,例如)以外的存取任何东西,变绝对应该是私有的。这是确保这个附加代码实际得到执行的唯一方法。

  • 如果您只需要一个存取器,因为您不希望变量可查询或可变,变量也应该是私有的。

  • 如果你想定义一个vanilla getter和setter,我认为,让变量公开并忘记访问器是安全的。无论如何,这个变量实际上是公开的。在这种情况下访问器只是冗余代码,因此不应该膨胀你的代码。而且之后很容易制作一个公共变量private,因为编译器会尽职尽责地列出你需要调整的每一行代码。

简而言之:默认情况下使用私有变量,并考虑您写入的每个访问者,因为它会为您的封装打洞。