B
BadWolf
Изучаю С++ по книжке. ("Программирование на С++" С.В.Глушаков Т.В.Дуравкина) .
На данный момент тема - перегрузка операторов.
Дана программа (складывает обыкновенные дроби)
Авторы говорят что строка - " z = x +3 " в данном случае должна быть эквивалентной строке - " z = operator+(x,Fraction(3))" ( z = 3 +x тоже соответствующим образом должно обрабатываться). Но компилятор выдает ошибку - предполагает, что operator+(Fraction &Ob1,int) должен так выглядеть.
Вопрос: У кого косяк: У меня или у авторов. И если у меня, то где тогда?
На данный момент тема - перегрузка операторов.
Дана программа (складывает обыкновенные дроби)
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) должен так выглядеть.
Вопрос: У кого косяк: У меня или у авторов. И если у меня, то где тогда?