2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 перегрузка операторов
Сообщение08.02.2009, 17:01 
Вот код который приведен в книге
Код:
class Counter
{
public:
     Counter();
     ~Counter(){}
     int GetItsVal()const { return itsVal; }
     void SetItsVal(int x) {itsVal = x; }
     const Counter& operator++ ();      // prefix
     const Counter operator++ (int); // postfix
private:
     int itsVal;
};

Counter::Counter():
itsVal(0)
{}

const Counter& Counter::operator++()   // prefix
{
     ++itsVal;
     return *this;
}

const Counter Counter::operator++(int)   // postfix
{
     Counter temp(*this); // <<-- меня интерисует вотэта строчка
     ++itsVal;
     return temp;
}


Что значит выделенная мной строчка?
И по возможности обясните какова тут логика.

 
 
 
 
Сообщение08.02.2009, 17:24 
В данном случае реализуется семантика оператора var++,
которая состоит в том, что результат этого выражения есть var, а не var + 1 (это выполняет интересующая вас строчка - путем сохранения текущего состояния во вспомогательной переменной temp, которое потом и возвращается по return). А оператор ++itsVal увеличивает на 1 свое текущее состояние и не портит возвращаемое значение.

 
 
 
 
Сообщение08.02.2009, 17:27 
Создаётся переменная temp типа Counter, и для нее вызывается копирующий конструктор, делающий из нее точную копию переменной *this.

Копирующий конструктор
Код:
Counter::Counter(Counter сделай_новый_каунтер_таким_же_как_этот)
не задан явно, и поэтому компилятор реализует его самостоятельно как умеет.

То есть идея примерно такая же, как выше в фразе itsVal(0) в обычном конструкторе.

 
 
 
 
Сообщение08.02.2009, 17:52 
А , все понял,(собственно до меня дошло зачем создавать копию:))
Я както и не подумал что это конструктор вызывается. Так сказать не привык ещо.

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group