• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

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) должен так выглядеть.

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

SunSanych

Не знаю что написано в книге, но ссылочные параметры перегруженного оператора должны быть константными, тогда все работает. Вот так:

Fraction operator+(const Fraction &ob1, const Fraction &ob2)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!