级联* this,返回对类常量的引用

时间:2013-02-15 00:29:18

标签: c++

我有一个关于在C ++中使用return *this语句进行级联的问题。我正在阅读一本教科书,并且遇到了一些我并不完全理解的级联用法。

以下代码是我自己的构造:

#include <iostream>
using namespace std;

class Time
  {
  public:
     Time( int = 0, int = 0 ); 
     Time & setHour( int );                 
     void print( void );
     Time & operator+=( int ); // Line in Question 

  private:
     int hour; 
     int minute; 
  };

  Time::Time(int hr, int mn)
  {
     hour = hr;
     minute = mn;
  }

  Time & Time::operator+=(int increment) // Line in Question
  {
    hour += increment;
    return *this;
  }

  Time & Time::setHour(int h)
  {
    hour = h;
    return *this;
  }

  void Time::print( void )
  {
     cout << "hour = " << hour << endl;
     cout << "minute = " << minute << endl;
  }

int main()
{
   cout << "Hello, world!" << endl;
   Time t;
   (t+=3)+=4;
   t.print();
   int x = 4;
   (x+=4)+=5;
   cout << x << endl;
}

请注意,+=运算符可以“级联”,就像我使用整数变量x“级联”一样。我正在阅读的文字似乎表明,标有评论// Line in Question的有问题的两行应该在时间前面有关键字const。也就是说,函数返回对Time对象常量的引用。我不明白为什么这是真的(或者这是有意义的情况),因为我们正在修改Date的数据成员。

在标记为const的行的开头设置关键字// Line in Question的目的是什么?

感谢。

1 个答案:

答案 0 :(得分:1)

  

在标题为// Line in Question?

的行的开头设置关键字const的目的是什么?

const返回operator +=引用会产生阻止您在main()函数中使用的级联类型的效果,例如:< / p>

(t+=3)+=4;

这会被阻止,因为t+=3将返回对Time对象的常量引用,并且由于operator +=本身不是const,因此您将获得编译尝试将+= 4应用于const返回的t+=3引用时出错(您无法在非const对象上调用const成员函数

我希望本书的作者能够评论防止这种情况的原因。我个人不明白为什么它在这里有害。