C ++类变量作为方法参数?

时间:2011-10-01 21:36:16

标签: c++

当我们定义类的方法时,如果我们使用类变量(无论是公共还是私有)作为方法参数,它是否正常?

换句话说哪一个会“更正确?”

已定义,

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*/}

3 个答案:

答案 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*/}

不要做同样的事情。第一个声明一个函数,其参数被称为xyz。因为它们的名称与类范围的变量相同,所以它们隐藏了类范围的变量。要访问“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中),但正如我的示例所示,您可以随时隐藏变量,使其不再可寻址。

简而言之,不要让你的生活变得艰难,并坚持一个明智的命名方案,避免不必要的歧义。如果没有将手绑在你的脚踝上,编程很难。