当局部变量具有相同名称时,如何在C ++中分配实例变量?

时间:2010-02-02 19:39:08

标签: c++ instance-variables

我有一个像这样定义的类:

class MyClass 
{
    int x;
    public: 
        MyClass(int x); 
};

MyClass::MyClass(int x)
{ //Assign x here 
}

但是,我无法在构造函数中初始化x,因为它与实例变量具有相同的名称。有没有办法解决这个问题(除了更改参数的名称)?

9 个答案:

答案 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不起作用?这就是我们所做的(或使用不同的参数名称)。