c++类变量作为方法参数

C++ class variables as method parameters?

本文关键字:方法 参数 类变量 c++      更新时间:2023-10-16

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

换句话说,哪一个"更正确"?

定义后,

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

这两个:

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等等。

这个不会导致参数被直接转发到类成员的值中。

两种方式都可以。如果您需要消除歧义,只需使用this关键字:

this->x = x;

这是"OK"的方式,与允许您打开新作用域和隐藏名称的方式相同:

int a;
void foo()
{
  int a;
  {
    int a;
    // how do we refer to the other two now?
  }
}

如果你的函数定义对参数变量使用了与类作用域中已经使用的相同的符号,那么函数作用域符号会隐藏外部作用域中的符号。您有时可以消除歧义(例如,在我的示例中使用::a,或在您的示例中使用this->x),但正如我的示例所示,您总是可以隐藏变量,以至于它不再是可寻址的。

简而言之,不要让你的生活变得艰难,坚持一个合理的命名方案,避免不必要的歧义。编程已经够难的了,不用把你的手绑在脚踝上。