2013-07-26 5 views
4

Я много думал (честно) - с последнего семестра. И я все еще не совсем уверен, что здесь происходит. Кто-нибудь сможет помочь и просветить меня? Я в порядке с разницей pre/postfix. Это как черт возьми, что доля увеличивается, что меня путаетобъяснение перегрузки оператора класса классов

возьмите пример примера. Итак, если бы у меня была доля, которая составляла 2/4, это увеличилось бы до 3/4? Потому что, когда я смотрю на Спальных + = DENOM, это заставляет меня думать, что он вернется 2 + 2 + 4, которая 8.

// prefix increment operator 
fraction& fraction::operator++() { 
    numer += denom; 
    return *this; 
} 

// postfix increment operator 
fraction fraction::operator++(int) {  // Note dummy int argument 
    fraction temp(*this); 
    ++*this;       // call the prefix operator 
    return temp; 

спасибо куч заранее :)

+0

Почему 2 + 2 + 4? 'number' равно 2, а' denom' равно 4. Следовательно, 'number + = denom;' делает 'число' 6. – chris

ответ

3

Функция префикс будет означать к

numer = numer + denom; 

поэтому в случае 2/4 было бы numer = 2 + 4 = 6, так что результат будет 6/4 (с DENOM остается неизменным). Начиная с n/n = 1 для всех целых чисел (кроме 0), (a+n)/n всегда будет увеличиваться на 1.

В постфиксной версии используется префиксная версия для выполнения описанных выше вычислений.

+1

Вы можете указать, что это эквивалентно добавлению' 1' к числу. (По крайней мере, для положительных чисел, у меня есть сомнения относительно того, работает ли алгоритм, если 'denom' отрицательный.) –

+0

@JamesKanze True. Но я ожидал бы, что большинство реализаций фракций будут хранить знак только в числителе. – Angew

+0

@JamesKanze Спасибо за предложение, принял его. – nijansen