не могу перегрузить оператор ==
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
не могу перегрузить оператор == - 2010-06-09 02:28:29.930000
|
|
|
Promlol
Сообщений: 19
Оценки: 0
Присоединился: 2010-04-04 23:00:01.010000
|
большую часть срежу так как не суть важна
#include <iostream>
using namespace std;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
class Rational
{
double numerator;
double denominator;
friend ostream & operator<<(ostream &, Rational &); // перегрузка оператора <<
friend istream & operator>>(istream &, Rational &); // перегрузка оператора >>
// создаем конструкторы
public:
double fraction;
Rational()
{
numerator =0;
denominator = 1;
fraction=numerator/denominator;
}
Rational(double num, double den)
{
cout << "Construction fraction\n";
numerator =num;
denominator = den;
fraction=num/den;
}
};
bool Rational::operator == (Rational &s)
{
if(s.fraction==fraction)
return true;
else
return false;
}
int main()
{
Rational value1(7,3),value2(15,8);
cout <<value1.fraction << " == " << value2.fraction <<"?";
value1.fraction == (value2.fraction);
}
получается так что при пошаговой компиляции, момент: value1.fraction == (value2.fraction); проходится мимо, что делать? помогите плиз (сами функции присваивания и т.д. вырезал, они не при чем)
|
|
|
RE: не могу перегрузить оператор == - 2010-06-09 02:39:02.303333
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
дай полный код
|
|
|
RE: не могу перегрузить оператор == - 2010-06-09 03:01:01.870000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Promlol момент: value1.fraction == (value2.fraction); проходится мимо собственно, а чего ты ожидаешь? ты расчитываешь значение типа bool, которое присваевается безымянной временной переменной и нигде не используется. если хочешь вывести его на экран - выводи, что ли
|
|
|
RE: не могу перегрузить оператор == - 2010-06-09 12:54:16.243333
|
|
|
Promlol
Сообщений: 19
Оценки: 0
Присоединился: 2010-04-04 23:00:01.010000
|
вот вам полный код:
#include <iostream>
using namespace std;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
class Rational
{
double numerator;
double denominator;
friend ostream & operator<<(ostream &, Rational &); // перегрузка оператора <<
friend istream & operator>>(istream &, Rational &); // перегрузка оператора >>
// создаем конструкторы
public:
double fraction;
Rational()
{
numerator =0;
denominator = 1;
fraction=numerator/denominator;
}
Rational(double num, double den)
{
cout << "Construction fraction\n";
numerator =num;
denominator = den;
fraction=num/den;
}
Rational (Rational &s) // конструктор копирования
{
numerator = s.numerator;
denominator = s.denominator;
}
Rational & operator = (Rational &s) // перегрузка оператора присваивания
{
Rational temp;
temp.fraction = s.fraction;
temp.fraction = fraction;
return temp;
}
Rational Rational::operator + (Rational &s);
void Rational::operator += (Rational &s);
Rational Rational::operator - (Rational &s);
void Rational::operator -= (Rational &s);
Rational Rational::operator * (Rational &s) ;
void Rational::operator *= (Rational &s) ;
Rational Rational::operator / (Rational &s) ;
void Rational::operator /= (Rational &s) ;
bool Rational::operator == (Rational &s);
};
Rational Rational::operator + (Rational &s)
{
Rational temp;
temp.fraction = s.fraction+fraction;
return temp;
}
void Rational::operator += (Rational &s)
{
s.fraction+fraction;
}
Rational Rational::operator - (Rational &s)
{
Rational temp;
temp.fraction = s.fraction-fraction;
return temp;
}
void Rational::operator -= (Rational &s)
{
s.fraction-fraction;
}
Rational Rational::operator * (Rational &s)
{
Rational temp;
temp.fraction = s.fraction*fraction;
return temp;
}
void Rational::operator *= (Rational &s)
{
s.fraction*fraction;
}
Rational Rational::operator / (Rational &s)
{
Rational temp;
temp.fraction = s.fraction/fraction;
return temp;
}
void Rational::operator /= (Rational &s)
{
s.fraction/fraction;
}
bool Rational::operator == (Rational &s)
{
if(s.fraction==fraction)
return true;
else
return false;
}
ostream & operator<<(ostream &out, Rational &s)
{
out <<s.numerator << " / " << s.denominator <<"\n";
return out;
}
istream & operator>>(istream &in, Rational &s)
{
in >> s.numerator >> s.denominator;
return in;
}
int main()
{
Rational value1(7,3),value2(15,8),value3;
cout <<value1.fraction << " + " << value2.fraction <<" = ";
cout << value1.fraction + value2.fraction << endl;
cout <<value3.fraction << " += " << value1.fraction<<" = ";
value3.fraction += value1.fraction;
cout <<value3.fraction<<"\n";
cout <<value1.fraction << " - " << value2.fraction <<" = ";
cout << value1.fraction - value2.fraction << endl;
cout <<value3.fraction << " -= " << value1.fraction<<" = ";
value3.fraction -= value1.fraction;
cout <<value3.fraction<<"\n";
cout <<value1.fraction << " * " << value2.fraction <<" = ";
cout << value1.fraction * value2.fraction << endl;
cout <<value3.fraction << " *= " << value1.fraction<<" = ";
value3.fraction *= value1.fraction;
cout <<value3.fraction<<"\n";
cout <<value1.fraction << " / " << value2.fraction <<" = ";
cout << value1.fraction / value2.fraction << endl;
cout <<value3.fraction << " /= " << value1.fraction<<" = ";
value3.fraction /= value1.fraction;
cout <<value3.fraction<<"\n";
cout <<value1.fraction << " == " << value2.fraction <<"?";
value1.fraction == (value2.fraction);
value3.fraction = value1.fraction;
cout <<value3.fraction << " = " << value1.fraction;
exit(1);
return 0;
}
если написать cout<< value1.fraction == (value2.fraction); то компилятор (VS) будет ругаться, операция '=' в пошаговом режиме проходит нормально, а когда '==' то оно сразу же пропускает и переходит к следующей строчке =((
|
|
|
RE: не могу перегрузить оператор == - 2010-06-09 13:24:50.310000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
К твоему сведению, числа типа double нельзя проверять на ==. И компилятор правильно ругается :), отключай ворнинги, если тебе они ни о чём не говорят.
|
|
|
RE: не могу перегрузить оператор == - 2010-06-09 13:26:27.746666
|
|
|
Promlol
Сообщений: 19
Оценки: 0
Присоединился: 2010-04-04 23:00:01.010000
|
и как тогда перегрузить? ((
|
|
|
RE: не могу перегрузить оператор == - 2010-06-09 13:49:06.283333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Я тебе не про перегрузку.
|
|
|
RE: не могу перегрузить оператор == - 2010-06-09 14:02:00.500000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
у тебя там ошибок больше, чем рабочего кода Rational & operator = (Rational &s) { Rational temp; temp.fraction = s.fraction; temp.fraction = fraction; return temp; } тут ты возвращаешь ссылку на локальную переменную void Rational::operator += (Rational &s) { s.fraction+fraction; } тут ты просто ничего не делаешь, т.к. результат операции не сохраняется ко всем остальным арифметическим операциям это также относится value1.fraction == (value2.fraction); здесь ты тоже ничего не делаешь, так как результат этой операции нигде не сохранён и никак не используется
|
|
|
RE: не могу перегрузить оператор == - 2010-06-09 14:13:35.776666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
я бы на твоём месте посидел бы, подумал, и писал бы всё заново семантика операций у тебя некорректная, интерфейс тоже (почему operator+= не возвращает значения, например?), фактические ошибки - в каждой процедуре. выставь компилятору максимальный уровень продупреждений и исправь все
|
|
|
RE: не могу перегрузить оператор == - 2010-06-09 14:48:33.490000
|
|
|
Promlol
Сообщений: 19
Оценки: 0
Присоединился: 2010-04-04 23:00:01.010000
|
Rational Rational::operator + (Rational &s)
{
Rational temp;
temp.fraction = s.fraction+fraction;
return temp;
}
void Rational::operator += (Rational &s)
{
s.fraction+fraction;
}
ну так =+ и + это по сути одна и таже операция, вот s.fraction+fraction; и ссылается на Rational Rational::operator + (Rational &s)
|
|
|
RE: не могу перегрузить оператор == - 2010-06-09 16:04:33.766666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Чел, ты что-то путаешь. Во-первых нет оператора =+, во-вторых кто тебе сказал, что += и + это одно и то же? Ты случайно не родственник Вирта?
|
|
|
RE: не могу перегрузить оператор == - 2010-06-09 17:11:04.123333
|
|
|
Promlol
Сообщений: 19
Оценки: 0
Присоединился: 2010-04-04 23:00:01.010000
|
где ты увидел в коде оператор =+ ??? n=n+k; (n+=k) == (n=n+k) вроде разницы нет не так ли. Ты случайно не родственник Вирта?
|
|
|
RE: не могу перегрузить оператор == - 2010-06-09 17:14:18.146666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Promlol void Rational::operator += (Rational &s) { fraction += s.fraction; } вот так это должно выглядеть quote:
ORIGINAL: Promlol ну так =+ и + это по сути одна и таже операция, вот s.fraction+fraction; и ссылается на Rational Rational::operator + (Rational &s) не ссылается. ты вызываешь double operator+(double, double), т.к. складываешь значения типа double (fraction и s.fraction)
|
|
|
RE: не могу перегрузить оператор == - 2010-06-09 20:11:08.293333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Тут. И не надо повышать шрифт, коли тебе помогают разобраться в том, что ты сам не можеьш освоить. quote:
ORIGINAL: Promlol ну так =+ и + это по сути одна и таже операция, вот s.fraction+fraction; и ссылается на Rational Rational::operator + (Rational &s)
|
|
|
RE: не могу перегрузить оператор == - 2010-06-09 23:25:44.400000
|
|
|
Promlol
Сообщений: 19
Оценки: 0
Присоединился: 2010-04-04 23:00:01.010000
|
где я шрифт повысил? твои посты особенно помогают я скажу…
|
|
|
|
|