成员名称和构造函数参数名称之间的冲突

cor*_*zza 6 c++ arguments class naming-conventions

可能重复:
C++中的成员与方法参数访问

我有了一些成员,如类x,y,widthheight.在它的构造函数中,我不会这样做:

A::A(int x, int y, int width, int height)
{
    x = x;
    y = y;
    width = width;
    height = height;
}
Run Code Online (Sandbox Code Playgroud)

这并没有真正意义,当与G ++编译x,y,width,和height成为怪异的值(例如-1405737648).

解决这些命名冲突的最佳方法是什么?

Luc*_*ore 17

您可以使用相同名称的初始化列表:

A::A(int x, int y, int width, int height) :
    x(x),
    y(y),
    width(width),
    height(height)
{
}
Run Code Online (Sandbox Code Playgroud)

如果您不想使用相同的名称,则可以使用不同的名称.我想到了一些匈牙利符号的变化(我可能会对此感到讨厌):

//data members
int x_;
int y_;
int width_;
int height_;
//constructor
A::A(int x, int y, int width, int height) :
    x_(x),
    y_(y),
    width_(width),
    height_(height)
{
}
Run Code Online (Sandbox Code Playgroud)

但第一个建议没有错.


das*_*ght 5

如果你必须在构造函数中使用赋值(而不是使用初始化列表,这是首选)的特定模式来解决这个问题是使用this指针,如下所示:

this->a = a;
Run Code Online (Sandbox Code Playgroud)