1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

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

  1. BadWolf

    BadWolf Гость

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

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

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

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

    Fraction operator+(const Fraction &ob1, const Fraction &ob2)
     
Загрузка...

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