我有一个像这样定义的类:
class MyClass
{
int x;
public:
MyClass(int x);
};
MyClass::MyClass(int x)
{ //Assign x here
}
但是,我无法在构造函数中初始化x
,因为它与实例变量具有相同的名称。有没有办法解决这个问题(除了更改参数的名称)?
答案 0 :(得分:12)
最好的选择是使用构造函数的初始化列表:
MyClass::MyClass(int x) : x( x ) { // Body }
但你也可以尝试这种方法:
MyClass::MyClass(int x) { this->x = x; }
答案 1 :(得分:8)
但是,我无法在构造函数中初始化x,因为它与实例变量具有相同的名称。有没有办法解决这个问题(除了更改参数的名称)?
所以改变参数的名称!
class MyClass
{
int x;
public:
MyClass(int xInitVal);
};
MyClass::MyClass(int xInitVal)
:x(xInitVal)
{ // Don't assign x here.
}
通过使参数名称与本地相同,您只需使代码难以阅读。 不要这样做。您遇到的几乎所有样式指南都会告诉您不要使参数与成员同名。请一点点常识。
<咆哮> 致所有回答的人:
this->x = x;
不要问我找工作。我的上帝,你正试图引起问题 它看起来很可怕这一事实并不能说明这是一个坏主意。
是的,这在技术上是允许的,但重点是使代码易于阅读和维护,而不是尝试使其成为解码前一作者意图的异国艺术。
< /咆哮>
答案 2 :(得分:3)
作为旁白 - 你真的应该有一个不会发生冲突的成员变量的命名约定。这通常是c ++房屋的编码规则1或2。然后,当你看到m_foo = bar时,你就知道究竟发生了什么
我们使用
int m_thingy;
我也见过
int _thingy;
int thingy_
如果您知道这一点并且不能或不会这样做,请提前道歉
答案 3 :(得分:2)
this->x = x;
答案 4 :(得分:2)
您可以使用this
显式引用当前对象:
this->x = x;
答案 5 :(得分:1)
我强烈建议您只更改变量名称。弄乱重复的标识符是一场没有原因的战斗。
在我的代码中,我为所有函数参数提供前缀'in'(“inValue”)。我给所有私有成员变量前缀'm'(“mValue”)。
答案 6 :(得分:0)
改为使用this->x
。
答案 7 :(得分:0)
使用this指针
MyClass::MyClass(int x)
{
this->x = x;
}
当然,首先没有像这样的碰撞名称将是一个更好的解决方案。
答案 8 :(得分:0)
this-> x = x不起作用?这就是我们所做的(或使用不同的参数名称)。