当我们定义类的方法时,如果我们使用类变量(无论是公共还是私有)作为方法参数,它是否正常?
换句话说哪一个会“更正确?”
已定义,
class myclass{
public:
int x, y;
double foo(int, int, int);
private:
int z;
}
这没关系
double myclass::foo(int x, int y, int z) {/* Blah Blah */}
或
double myclass::foo(int xx, int yy, int zz){x=xx; y=yy; z=zz /* Blah Blah*/}
答案 0 :(得分:3)
无论哪种方式都没问题。如果您需要消除歧义,只需使用this
关键字:
this->x = x;
答案 1 :(得分:3)
这两个:
double myclass::foo(int x, int y, int z) {/* Blah Blah */}
double myclass::foo(int xx, int yy, int zz){x=xx; y=yy; z=zz /* Blah Blah*/}
不要做同样的事情。第一个声明一个函数,其参数被称为x
,y
和z
。因为它们的名称与类范围的变量相同,所以它们隐藏了类范围的变量。要访问“Blah Blah”中的隐藏成员,您必须使用this->x
等等。
此不会导致参数直接转发到类成员的值中。
答案 2 :(得分:2)
“OK”与允许打开新范围和隐藏名称的方式相同:
int a;
void foo()
{
int a;
{
int a;
// how do we refer to the other two now?
}
}
如果函数 definition 使用与类范围中已使用的参数变量相同的符号,则函数范围符号会隐藏外部范围中的符号。您有时可以消除歧义(例如,在我的示例中使用::a
,或在您的this->x
中),但正如我的示例所示,您可以随时隐藏变量,使其不再可寻址。
简而言之,不要让你的生活变得艰难,并坚持一个明智的命名方案,避免不必要的歧义。如果没有将手绑在你的脚踝上,编程很难。