2015-12-21 2 views
-3

Это код, представляющий фракцию с оператором перегрузкой+ = оператор перегрузка C++

class Fraction 
{ 
private: 
int _counter, _denominator; 
public: 
Fraction(int _x, int _y); 

Fraction & operator+=(int b) 
{ 
    _counter = _counter + b*_denominator; 
    return *this; 
} 

Fraction & operator-=(int b) 
{ 
    _counter = _counter - b*_denominator; 
    return *this; 
} 
}; 

Fraction::Fraction(int _x, int _y) 
{ 
    _counter = _x; 
    _denominator = _y; 
} 


void main() 
{ 
    Fraction *f = new Fraction(2, 4); 

    f += 5; 
} 

Может кто-нибудь сказать мне, почему оператор += перегрузка не работает?

+1

Вы должны использовать '* е + = 5;' или 'f-> оператор + = (5),' ' –

+2

f' является указателем на абсолютно нет причина. Это проблема. – juanchopanza

+1

Почему вы используете 'new'? Используйте переменные с автоматическим хранилищем (т. Е. Стек), когда это возможно. – Kevin

ответ

1

Если вы реализуете operator+=() вы должны знать об этом и использовать его самостоятельно, так что этот код:

_counter = _counter + b*_denominator; 

Пишется лучше, как:

_counter += b * _denominator; 

Как короче и компактнее ,

О ошибке: Использование объекта вместо указателя, как это не Java:

int main() // main() must return int 
{ 
    Fraction f(2, 4); 
    f += 5; 
} 
+2

_ "должно быть написано как" _ Почему? –

+0

@LightnessRacesinOrbit короче и меньше подробностей – Slava

+1

@Slava: so * may * вместо * should *. – Jarod42

1

Вы перегружать оператор для фракцией объектов, но при добавлении 5 к фракции * объекта - указатель на фракцию.

Что-то, как это будет работать:

(*f) += 5; 
Смежные вопросы