operator++()
является pre-increment Оператор. Он предназначен для изменения исходного объекта, а затем возвращает ссылку на объект после того, как он был увеличен. Ссылка позволяет код для продолжения доступа исходный объект из возвращаемого значения непосредственно, например:
Seti s;
(++s).something // something applies to s itself, not a copy of s
operator++(int)
является пост-инкремент оператора. Он предназначен для изменения исходного объекта, а затем возвращает копию объекта до его приращения. Поскольку он возвращает предыдущее состояние объекта, он не возвращает ссылку на исходный объект.
Декларация, указанная в вашем задании, предлагает оператору pre-increment, поскольку входной параметр отсутствует. Однако возвращаемое значение должно быть ссылкой. правильно реализация будет:
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)
S 13.5.7 стандарта C++ показывает официальную декларацию этих операторов:
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++
Вы должны добавить то, что ожидаете от вас, и что на самом деле происходит. – chris
i havent закончил кодирование задания, я просто хотел узнать, является ли это законным. Что должно случиться, так это freq ++, и копия текущего объекта должна быть возвращена. – user2125022
Почему это помечено 'C'? –