关于在C ++中使用“this”关键字的问题

时间:2011-06-22 15:55:04

标签: c++

class Monitor
{
private:
    int rate;

    Monitor(int rate)
    {
        this.rate = rate;
    }
}

这是我的代码。我尝试使用通过构造函数“rate”的本地成员设置私有成员“rate”。但是我可以在C#中使用它。

错误是:

表达式必须具有类类型

8 个答案:

答案 0 :(得分:12)

正如其他人所说的那样,

this是一个指针,但使用基本初始化列表更好更准确:

class Monitor
{
   int rate;
public:
   Monitor(int rate) : rate(rate) { }
};

这样,Monitor::rate 初始化到正确的值,而不是首先默认初始化然后分配。对于更一般的成员对象,这实际上可能是初始化它们的唯一合法方式。

答案 1 :(得分:4)

class Monitor
{
private:
    int rate;

    Monitor(int rate)
    {
        this->rate = rate;
    }
}

这需要像指针一样对待。因此 - >

答案 2 :(得分:3)

当您引用this时,您正在访问指向该对象的指针。你想要做的是:

Monitor(int rate)
{
    this->rate = rate;
}

答案 3 :(得分:2)

this关键字表示指向当前对象的指针。 你必须写:

this->rate = rate;

如果您有一个类的实例,则使用点表示法。

答案 4 :(得分:2)

Monitor(int r)
    {
        rate = r;
    }

或者更好的是:

Monitor(int r): rate(r)
    {}

答案 5 :(得分:1)

this-> rate = rate。指针使用 - > C ++中的operator。

答案 6 :(得分:1)

由于是指向self的指针,因此您必须使用它。这可以解决您的问题:

class Monitor
{
private:
    int rate;

    Monitor(int rate)
    {
        this->rate = rate; // this is a pointer
    }
};

答案 7 :(得分:1)

虽然它是完全合法的C ++代码,但不应该为类的参数和成员使用相同的名称。更好的实施将是:

    class Monitor
    {
    private:    
         int Rate;     // Or m_nRate
    public:
          Monitor(int rate /* OR nRate */) : Rate(rate) /* m_nRate(nRate);*/

          // OR
          Monitor(int rate /* OR nRate */)
          {
              Rate = rate; // this->Rate = rate;     // this->m_nRate = nRate;
          }
      };