2013-04-06 6 views
0

назначение, основанное на операторе = перегрузка копии и учебные объекты. оператор кодирования ++ для класса.этот указатель, оператор = и оператор ++

инструкции являются:

Seti operator++(); 
    This operator simply increases the value of a Seti object's frequency 
    by 1 (to a maximum of 9), before returning a copy of itself. 
    NOTE: The frequency can never exceed 9. 

я могу это сделать:

Seti Seti::operator++() { 
    Seti temp; 
    temp = *this 
    if (temp.freq<9) 
    temp.freq+=1; 
    return temp; 
} 

спасибо.

+4

Вы должны добавить то, что ожидаете от вас, и что на самом деле происходит. – chris

+0

i havent закончил кодирование задания, я просто хотел узнать, является ли это законным. Что должно случиться, так это freq ++, и копия текущего объекта должна быть возвращена. – user2125022

+0

Почему это помечено 'C'? –

ответ

1

Это не соответствует указанному поведению, которое заключается в увеличении частоты объекта operator++.

+0

Извините, я написал это быстро, просто притворись, что я увеличил его до темпа = * этого – user2125022

+3

@ user2125022: Вместо того, чтобы притворяться, почему бы вам не изменить свой вопрос? –

1

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++ 
+0

Это нормальная семантика. Они не требуются. Если вы все еще требуете возврата по ссылке, это требование, пожалуйста, укажите стандарт. –

+0

I downvote ответ, когда он говорит что-то ** требуется **, когда на самом деле это только * хорошая практика *. –

+1

Раздел 13.5.7 стандарта C++ показывает официальное объявление операторов: 'class X { public: X & operator ++(); // prefix ++ a X operator ++ (int); // postfix a ++ }; класс Y {}; Y & operator ++ (Y &); // prefix ++ b Y operator ++ (Y &, int); // postfix b ++ ' –

Смежные вопросы