我有一个关于在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
的目的是什么?
感谢。
答案 0 :(得分:1)
在标题为// Line in Question?
的行的开头设置关键字const的目的是什么?
从const
返回operator +=
引用会产生阻止您在main()
函数中使用的级联类型的效果,例如:< / p>
(t+=3)+=4;
这会被阻止,因为t+=3
将返回对Time
对象的常量引用,并且由于operator +=
本身不是const
,因此您将获得编译尝试将+= 4
应用于const
返回的t+=3
引用时出错(您无法在非const
对象上调用const
成员函数
我希望本书的作者能够评论防止这种情况的原因。我个人不明白为什么它在这里有害。