2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 перегрузка операторов
Сообщение08.02.2009, 17:01 


23/12/08
245
Украина
Вот код который приведен в книге
Код:
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 


27/11/05
183
Северодонецк
В данном случае реализуется семантика оператора var++,
которая состоит в том, что результат этого выражения есть var, а не var + 1 (это выполняет интересующая вас строчка - путем сохранения текущего состояния во вспомогательной переменной temp, которое потом и возвращается по return). А оператор ++itsVal увеличивает на 1 свое текущее состояние и не портит возвращаемое значение.

 Профиль  
                  
 
 
Сообщение08.02.2009, 17:27 
Экс-модератор


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

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

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

 Профиль  
                  
 
 
Сообщение08.02.2009, 17:52 


23/12/08
245
Украина
А , все понял,(собственно до меня дошло зачем создавать копию:))
Я както и не подумал что это конструктор вызывается. Так сказать не привык ещо.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group