Вопрос По Перегрузке Операторов

  • Автор темы BadWolf
  • Дата начала
B

BadWolf

Гость
#1
Изучаю С++ по книжке. ("Программирование на С++" С.В.Глушаков Т.В.Дуравкина) .

На данный момент тема - перегрузка операторов.

Дана программа (складывает обыкновенные дроби)
C++:
#include<iostream>

using namespace std;

class Fraction
{
int x,y;
public:
Fraction() {x = 0; y=1;}
Fraction(int _x, int _y) { x = _x; y = _y;}
Fraction(int _x) { x = _x; y = 1;}
void View();
friend Fraction operator+ (Fraction &ob1, Fraction &ob2);
};

void Fraction::View()
{
int m=1;
for (int i=1;i<102;i++)
{
if ((x%i==0) && (y%i==0)) m=i;
};
if (x%y==0) printf("%d\n",x/y);
else printf("%d/%d\n",x/m,y/m);
}

Fraction operator+ (Fraction &ob1, Fraction &ob2)
{
Fraction temp;
temp.x = ob1.y*ob2.x + ob1.x*ob2.y;
temp.y = ob1.y*ob2.y;
return temp;
}

int main()
{
Fraction x(1,2),y(1,5),z;
z = x + y;
z.View();
z = 3 + x;
z.View();
z = x + 3;
z.View();
system("pause");
return 0;
}
Авторы говорят что строка - " z = x +3 " в данном случае должна быть эквивалентной строке - " z = operator+(x,Fraction(3))" ( z = 3 +x тоже соответствующим образом должно обрабатываться). Но компилятор выдает ошибку - предполагает, что operator+(Fraction &Ob1,int) должен так выглядеть.

Вопрос: У кого косяк: У меня или у авторов. И если у меня, то где тогда?
 

SunSanych

Well-Known Member
28.06.2006
71
0
#2
Не знаю что написано в книге, но ссылочные параметры перегруженного оператора должны быть константными, тогда все работает. Вот так:

Fraction operator+(const Fraction &ob1, const Fraction &ob2)