代码之家  ›  专栏  ›  技术社区  ›  Mike

当本地变量具有相同的名称时,如何分配C++中的实例变量?

  •  2
  • Mike  · 技术社区  · 15 年前

    我有一个这样定义的类:

    class MyClass 
    {
        int x;
        public: 
            MyClass(int x); 
    };
    
    MyClass::MyClass(int x)
    { //Assign x here 
    }
    

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

    9 回复  |  直到 15 年前
        1
  •  13
  •   Naaff    15 年前

    最好的选择是使用构造函数的初始值设定项列表:

    MyClass::MyClass(int x) : x( x ) { // Body }
    

    MyClass::MyClass(int x) { this->x = x; }
    
        2
  •  9
  •   JeffUK    4 年前

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

    class MyClass  
    { 
        int x; 
        public:  
            MyClass(int xInitVal);  
    }; 
    
    MyClass::MyClass(int xInitVal)
        :x(xInitVal)
    { // Don't assign x here.  
    } 
    

    通过使参数名与本地名称相同,只会使代码难以阅读。

    不要这样做。几乎您遇到的每个样式指南都会告诉您不要使参数与成员同名。

        3
  •  3
  •   pm100    15 年前

    顺便说一下,您确实应该为您的成员变量制定一个不冲突的命名约定。对于C++的房子来说,这通常是编码规则1或2。然后,当你看到m_foo=bar时,你确切地知道发生了什么

    我们使用

     int m_thingy;
    

    我也看到了

     int _thingy;
     int thingy_
    

    如果您知道这一点,并且不能或不愿这样做,请提前道歉

        4
  •  2
  •   Nikolai Fetissov    15 年前

    this->x = x;

        5
  •  2
  •   sth    15 年前

    this 要显式引用当前对象,请执行以下操作:

    this->x = x;
    
        6
  •  1
  •   TheBuzzSaw    15 年前

    我强烈建议您更改变量名。搞乱重复标识符是一场无缘无故的战斗。

        7
  •  0
  •   Ignacio Vazquez-Abrams    15 年前

    使用 this->x 相反

        8
  •  0
  •   Ruddy    15 年前

    使用此指针的

    MyClass::MyClass(int x)
    {
        this->x = x;
    }
    

        9
  •  0
  •   LH.    15 年前

    这->x=x不工作了?我们就是这么做的(或者使用了不同的参数名)。