operator++()是预增量运算符。它旨在修改原始对象,然后在递增后返回对该对象的引用。引用允许代码直接从返回值继续访问原始对象,例如:
Seti s;
(++s).something // something applies to s itself, not a copy of s
operator++(int)是后增量运算符。它旨在修改原始对象,然后在递增之前返回对象的副本。由于它正在返回对象的先前状态,因此它不会返回对原始对象的引用。
您的作业中显示的声明建议使用预增量运算符,因为没有输入参数。但是,返回值应该是一个引用。正确的实现是:
Seti& Seti::operator++()
{
if (this->freq < 9)
this->freq += 1;
return *this;
}
另一方面,如果你想实现后自增运算符,正确的实现应该是:
Seti Seti::operator++(int)
{
Seti temp(*this);
if (this->freq < 9)
this->freq += 1;
return temp;
}
使用运算符时:
Seti s;
++s; // calls operator++()
s++; // calls operator++(int)
C++ 标准的第 13.5.7 节显示了这些运算符的官方声明:
class X {
public:
X& operator++(); // prefix ++a
X operator++(int); // postfix a++
};
class Y { };
Y& operator++(Y&); // prefix ++b
Y operator++(Y&, int); // postfix b++