C ++成员变量(C++ Member Variables)

2019-07-29 00:58发布

考虑下面的类:

class A
{
  A();
  int number;
  void setNumber(int number);
};

你可以在3种方式实现“setNumber”:

方法1:使用this指针。

void A::setNumber(int number)
{
  this->number = number;
}

方法2:使用范围解析操作。

void A::setNumber(int number)
{
  A::number = number;
}

方法3:相反,表示具有“M”或“_”所有成员变量(这是我的首选方法)。

void A::setNumber(int number)
{
  mNumber = number;
}

这仅仅是个人喜好,或者是有没有选择特定的方法有什么好处?

Answer 1:

这主要是个人喜好,但是我们想从那里许多小游戏正在同时进行(所以有很多的编码风格我周围的人所使用)的公司内部分享我在这个问题上的观点。

此链接有几个不错的,相关的,回答: 在C ++类的成员变量为什么要使用前缀

您的选项1:

void A::setNumber(int number)
{
  this->number = number;
}

首先,许多程序员往往会觉得这比较麻烦,不断地键入了“这个 - >”。 其次,更重要的是,如果你的任何变量股与一个参数或局部变量,一个查找替换设计说,改变“数字”的名称可能会影响位于该成员变量的名称查找替换范围为好。

您的选项2:

void A::setNumber(int number)
{
  A::number = number;
}

我已经与此碰到的问题是,在大班,或用大功能(在这里你看不到的功能或类意外命名),A的格式化类::(东西)看起来非常像访问命名空间的一部分,所以可能会产生误导。 另一个问题是一样的#2从前面的选项,如果你的名字是类似于您正在使用有可能有时会出现意想不到的混乱的变量。

你选择3:

void A::setNumber(int number) 
{
  mNumber = number;
}

这是最好的这三个选项的介绍。 通过创建(并保持到了!),涉及一个明确的和有意义的前缀的语法,你不仅创建本地(或全局)变量不会共享一个唯一的名称,但您在何处变量声明立即清楚,不管上下文你找到它。我已经看到了它做两人都喜欢这个“mVariable”像这样“m_variable”,它主要取决于如果你喜欢下划线大写级联时。 此外,如果你的风格趋向于增加之类的东西“P‘论为指针,或’G” S对全局变量,这种风格将网格好,读者可以预期的。



Answer 2:

这是一个风格问题,因此个人喜好,或者你正在使用的团队的偏好,或者您正在使用球队的老板。



Answer 3:

方案四

void A::setNumber(int n)
{
  number = n;
}

为什么使用相同名称的成员参数的利益。 没有良好的可以来这一点。 当然,它现在是明确的,但是当你的方法获得大,与原型不适合在屏幕了,而且还有一些其他开发人员编写代码,他可能会忘记资格的成员。



Answer 4:

其所有的个人喜好

但这里是一个高的非语言层面上有一个很好的讨论

https://stackoverflow.com/questions/381098/what-naming-convention-do-you-use-for-member-variables



Answer 5:

我想说的方法1和方法3之间的选择是个人或组织风格问题。

方法2是较差的,因为类::构件通常表示一个静态成员变量,因此如果使用的参数和成员变量之间的歧义会引起混乱。



Answer 6:

我打算通过提供更好的方法与Luchian同意。 您提供的其他例子过于繁琐或混乱。

方案四

void A::setNumber(int aNumber)
{
  theNumber = aNumber;
}

这是我们在我的雇主使用的编码标准的一部分,它是很清楚你所描述的。 这不是匈牙利命名法。



文章来源: C++ Member Variables