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

Тема в разделе "Общие вопросы по С и С++", создана пользователем BadWolf, 14 янв 2012.

  1. BadWolf

    BadWolf Гость

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

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

    Дана программа (складывает обыкновенные дроби)
    Код (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) должен так выглядеть.

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

    SunSanych Well-Known Member

    Регистрация:
    28 июн 2006
    Сообщения:
    71
    Симпатии:
    0
    Не знаю что написано в книге, но ссылочные параметры перегруженного оператора должны быть константными, тогда все работает. Вот так:

    Fraction operator+(const Fraction &ob1, const Fraction &ob2)
     
Загрузка...
Похожие Темы - Вопрос По Перегрузке
  1. ApplePen
    Ответов:
    0
    Просмотров:
    80
  2. gURaBA_N
    Ответов:
    3
    Просмотров:
    98
  3. kartaman
    Ответов:
    0
    Просмотров:
    128
  4. Peter
    Ответов:
    4
    Просмотров:
    527
  5. di0d_
    Ответов:
    1
    Просмотров:
    442

Поделиться этой страницей