C ++类成员函数的参数是否可以与同一类的成员数据具有相同的标识符(名称)?
我处理这个的方法是使用this
指针,但我不确定代码是否会按预期编译;
例如:
class M {
[public/private:]
int i;
void add(int i)
{
(this->i) = ((this->i) + i);
return;
}
}
相当奇怪的例子,但它证明了原理。是否需要括号?
答案 0 :(得分:2)
正如Jarod42告诉你的那样,代码在没有括号的情况下有效。
另一种不使用this
的方法是使用范围解析运算符::
:
class M {
public:
int i=0; // better initialize it, if you do not have a constructor.
void add(int i)
{
M::i = M::i + i; // the i belonging to class M vs. parameter i
return;
}
};
答案 1 :(得分:1)
代码有效,不需要括号。
此外,您可能还有
class M
{
public:
explicit M(int i) : i(i) {} // initialize member with method argument as expected.
private:
int i;
};
答案 2 :(得分:1)
您的代码是正确的,但您可以使用:
void add(int i) {
this->i += i;
}
因为你不需要括号,+=
也不会让它看起来如此丑陋。顺便说一句:您不需要显式的return语句,因为该方法会在完成后自动返回。
答案 3 :(得分:0)
但是我不确定代码是否会按预期编译;
为什么不试试呢?
无论如何,答案是:是的,它会。
只是如果你经常遇到这个问题,很可能你的标识符可能更长或更具描述性。 i
几乎不是函数参数或成员变量的可接受名称。
您还会发现许多编码标准要求您区分成员变量和功能参数,例如:通过在m_
之前添加所有成员变量。在这种情况下,您的i
成员变量将变为m_i
。这些是风格问题,有可能引发激烈的讨论。
示例中的括号是多余的。有时,多余的括号增强了代码的可读性,但在这种情况下,我不这么认为。当然,使用+=
运算符可以进一步简化代码:
void add(int i)
{
this->i += i;
return;
}