Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

не могу перегрузить оператор ==

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> не могу перегрузить оператор ==
Имя
Сообщение << Старые топики   Новые топики >>
не могу перегрузить оператор == - 2010-06-09 02:28:29.930000   
Promlol

Сообщений: 19
Оценки: 0
Присоединился: 2010-04-04 23:00:01.010000
большую часть срежу так как не суть важна #include &lt;iostream&gt; using namespace std; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; class Rational { &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double numerator; &nbsp;&nbsp;&nbsp; double denominator; &nbsp;&nbsp; friend ostream &amp; operator&lt;&lt;(ostream &amp;, Rational &amp;); // перегрузка оператора &lt;&lt; &nbsp;&nbsp; friend istream &amp; operator&gt;&gt;(istream &amp;, Rational &amp;); // перегрузка оператора &gt;&gt; &nbsp; // создаем конструкторы&nbsp;&nbsp; public: &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double fraction; &nbsp;&nbsp;&nbsp; Rational() &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; numerator =0; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; denominator = 1; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fraction=numerator/denominator;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; Rational(double num, double den) { &nbsp;&nbsp;&nbsp; cout &lt;&lt; "Construction fraction\n"; &nbsp;&nbsp;&nbsp; numerator =num; &nbsp;&nbsp;&nbsp; denominator = den; &nbsp;&nbsp;&nbsp; fraction=num/den; } }; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; bool Rational::operator == (Rational &amp;s) &nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; &nbsp; if(s.fraction==fraction) &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; return true; &nbsp;&nbsp;&nbsp; &nbsp; else &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; return false; &nbsp;&nbsp; } int main() { &nbsp;&nbsp;&nbsp; Rational value1(7,3),value2(15,8); &nbsp;&nbsp;&nbsp; cout &lt;&lt;value1.fraction &lt;&lt; " == " &lt;&lt; value2.fraction &lt;&lt;"?"; &nbsp;&nbsp;&nbsp; value1.fraction == (value2.fraction); } получается так что при пошаговой компиляции, момент: value1.fraction == (value2.fraction); проходится мимо, что делать? помогите плиз (сами функции присваивания и т.д. вырезал, они не при чем)
Post #: 1
RE: не могу перегрузить оператор == - 2010-06-09 02:39:02.303333   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
дай полный код
Post #: 2
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, которое присваевается безымянной временной переменной и нигде не используется. если хочешь вывести его на экран - выводи, что ли
Post #: 3
RE: не могу перегрузить оператор == - 2010-06-09 12:54:16.243333   
Promlol

Сообщений: 19
Оценки: 0
Присоединился: 2010-04-04 23:00:01.010000
вот вам полный код:
#include &lt;iostream&gt; using namespace std; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; class Rational { &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double numerator; &nbsp;&nbsp;&nbsp; double denominator; &nbsp;&nbsp; friend ostream &amp; operator&lt;&lt;(ostream &amp;, Rational &amp;); // перегрузка оператора &lt;&lt; &nbsp;&nbsp; friend istream &amp; operator&gt;&gt;(istream &amp;, Rational &amp;); // перегрузка оператора &gt;&gt; &nbsp; // создаем конструкторы&nbsp;&nbsp; public: &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double fraction; &nbsp;&nbsp;&nbsp; Rational() &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; numerator =0; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; denominator = 1; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fraction=numerator/denominator;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; Rational(double num, double den) { &nbsp;&nbsp;&nbsp; cout &lt;&lt; "Construction fraction\n"; &nbsp;&nbsp;&nbsp; numerator =num; &nbsp;&nbsp;&nbsp; denominator = den; &nbsp;&nbsp;&nbsp; fraction=num/den; } &nbsp; &nbsp;&nbsp; Rational (Rational &amp;s) // конструктор копирования &nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; numerator = s.numerator; &nbsp;&nbsp;&nbsp; &nbsp; denominator = s.denominator; &nbsp;&nbsp; } &nbsp;&nbsp; Rational &amp; operator = (Rational &amp;s) // перегрузка оператора присваивания &nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; &nbsp; Rational temp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; temp.fraction = s.fraction; &nbsp;&nbsp;&nbsp; &nbsp; temp.fraction = fraction; &nbsp;&nbsp;&nbsp; &nbsp; return temp; &nbsp;&nbsp; } &nbsp;&nbsp; Rational Rational::operator + (Rational &amp;s); &nbsp;void Rational::operator += (Rational &amp;s); &nbsp; Rational Rational::operator - (Rational &amp;s); &nbsp;&nbsp;&nbsp; void Rational::operator -= (Rational &amp;s); &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Rational Rational::operator * (Rational &amp;s) ; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; void Rational::operator *= (Rational &amp;s) ; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Rational Rational::operator / (Rational &amp;s) ; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; void Rational::operator /= (Rational &amp;s) ; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; bool Rational::operator == (Rational &amp;s); }; &nbsp; &nbsp;&nbsp; Rational Rational::operator + (Rational &amp;s) &nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; &nbsp; Rational temp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; temp.fraction = s.fraction+fraction; &nbsp;&nbsp;&nbsp; &nbsp; return temp; &nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void Rational::operator += (Rational &amp;s) &nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; &nbsp; s.fraction+fraction; &nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; Rational Rational::operator - (Rational &amp;s) &nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; &nbsp; Rational temp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; temp.fraction = s.fraction-fraction; &nbsp;&nbsp;&nbsp; &nbsp; return temp; &nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; void Rational::operator -= (Rational &amp;s) &nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; &nbsp; s.fraction-fraction; &nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Rational Rational::operator * (Rational &amp;s) &nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; &nbsp; Rational temp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; temp.fraction = s.fraction*fraction; &nbsp;&nbsp;&nbsp; &nbsp; return temp; &nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; void&nbsp;&nbsp; Rational::operator *= (Rational &amp;s) &nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; &nbsp; s.fraction*fraction; &nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; Rational Rational::operator / (Rational &amp;s) &nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; &nbsp; Rational temp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; temp.fraction = s.fraction/fraction; &nbsp;&nbsp;&nbsp; &nbsp; return temp; &nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; void Rational::operator /= (Rational &amp;s) &nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; &nbsp; s.fraction/fraction; &nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; bool Rational::operator == (Rational &amp;s) &nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; &nbsp; if(s.fraction==fraction) &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; return true; &nbsp;&nbsp;&nbsp; &nbsp; else &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; return false; &nbsp;&nbsp; } ostream &amp; operator&lt;&lt;(ostream &amp;out, Rational &amp;s) { &nbsp;&nbsp; out &lt;&lt;s.numerator &lt;&lt; " / " &lt;&lt; s.denominator &lt;&lt;"\n"; &nbsp; &nbsp;&nbsp; return out; } &nbsp; istream &amp; operator&gt;&gt;(istream &amp;in, Rational &amp;s) { &nbsp;&nbsp; in &gt;&gt; s.numerator &gt;&gt; s.denominator; &nbsp; &nbsp;&nbsp; return in; } int main() { &nbsp;&nbsp;&nbsp; Rational value1(7,3),value2(15,8),value3; &nbsp; &nbsp;&nbsp;&nbsp; cout &lt;&lt;value1.fraction &lt;&lt; " + " &lt;&lt; value2.fraction &lt;&lt;" = "; &nbsp;&nbsp;&nbsp; cout &lt;&lt; value1.fraction + value2.fraction &lt;&lt; endl; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout &lt;&lt;value3.fraction &lt;&lt; " += " &lt;&lt; value1.fraction&lt;&lt;" = "; &nbsp;&nbsp;&nbsp; value3.fraction += value1.fraction; &nbsp;&nbsp;&nbsp; cout &lt;&lt;value3.fraction&lt;&lt;"\n"; &nbsp;&nbsp;&nbsp; cout &lt;&lt;value1.fraction &lt;&lt; " - " &lt;&lt; value2.fraction &lt;&lt;" = "; &nbsp;&nbsp;&nbsp; cout &lt;&lt; value1.fraction - value2.fraction &lt;&lt; endl; &nbsp; &nbsp;&nbsp;&nbsp; cout &lt;&lt;value3.fraction &lt;&lt; " -= " &lt;&lt; value1.fraction&lt;&lt;" = "; &nbsp;&nbsp;&nbsp; value3.fraction -= value1.fraction; &nbsp;&nbsp;&nbsp; cout &lt;&lt;value3.fraction&lt;&lt;"\n"; &nbsp;&nbsp;&nbsp; cout &lt;&lt;value1.fraction &lt;&lt; " * " &lt;&lt; value2.fraction &lt;&lt;" = "; &nbsp;&nbsp;&nbsp; cout &lt;&lt; value1.fraction * value2.fraction &lt;&lt; endl; &nbsp;&nbsp;&nbsp; cout &lt;&lt;value3.fraction &lt;&lt; " *= " &lt;&lt; value1.fraction&lt;&lt;" = "; &nbsp;&nbsp;&nbsp; value3.fraction *= value1.fraction; &nbsp;&nbsp;&nbsp; cout &lt;&lt;value3.fraction&lt;&lt;"\n"; &nbsp;&nbsp;&nbsp; cout &lt;&lt;value1.fraction &lt;&lt; " / " &lt;&lt; value2.fraction &lt;&lt;" = "; &nbsp;&nbsp;&nbsp; cout &lt;&lt; value1.fraction / value2.fraction &lt;&lt; endl; &nbsp;&nbsp;&nbsp; cout &lt;&lt;value3.fraction &lt;&lt; " /= " &lt;&lt; value1.fraction&lt;&lt;" = "; &nbsp;&nbsp;&nbsp; value3.fraction /= value1.fraction; &nbsp;&nbsp;&nbsp; cout &lt;&lt;value3.fraction&lt;&lt;"\n"; &nbsp;&nbsp;&nbsp; cout &lt;&lt;value1.fraction &lt;&lt; " == " &lt;&lt; value2.fraction &lt;&lt;"?"; &nbsp;&nbsp;&nbsp; value1.fraction == (value2.fraction); &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; value3.fraction = value1.fraction; &nbsp;&nbsp;&nbsp; cout &lt;&lt;value3.fraction &lt;&lt; " = " &lt;&lt; value1.fraction; &nbsp; &nbsp;&nbsp;&nbsp; exit(1); &nbsp;&nbsp;&nbsp; return 0; }
если написать
cout<< value1.fraction == (value2.fraction);
то компилятор (VS) будет ругаться, операция '='  в пошаговом режиме проходит нормально,  а когда '==' то оно сразу же пропускает и переходит к следующей строчке =((
Post #: 4
RE: не могу перегрузить оператор == - 2010-06-09 13:24:50.310000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
К твоему сведению, числа типа double нельзя проверять на ==. И компилятор правильно ругается :), отключай ворнинги, если тебе они ни о чём не говорят.
Post #: 5
RE: не могу перегрузить оператор == - 2010-06-09 13:26:27.746666   
Promlol

Сообщений: 19
Оценки: 0
Присоединился: 2010-04-04 23:00:01.010000
и как тогда перегрузить? ((
Post #: 6
RE: не могу перегрузить оператор == - 2010-06-09 13:49:06.283333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Я тебе не про перегрузку.
Post #: 7
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;

&nbsp;&nbsp; return temp;
}

тут ты возвращаешь ссылку на локальную переменную

void Rational::operator += (Rational &s)
{
&nbsp;&nbsp; s.fraction+fraction;
}

тут ты просто ничего не делаешь, т.к. результат операции не сохраняется

ко всем остальным арифметическим операциям это также относится

value1.fraction == (value2.fraction);

здесь ты тоже ничего не делаешь, так как результат этой операции нигде не сохранён и никак не используется
Post #: 8
RE: не могу перегрузить оператор == - 2010-06-09 14:13:35.776666   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
я бы на твоём месте посидел бы, подумал, и писал бы всё заново

семантика операций у тебя некорректная, интерфейс тоже (почему operator+= не возвращает значения, например?), фактические ошибки - в каждой процедуре. выставь компилятору максимальный уровень продупреждений и исправь все
Post #: 9
RE: не могу перегрузить оператор == - 2010-06-09 14:48:33.490000   
Promlol

Сообщений: 19
Оценки: 0
Присоединился: 2010-04-04 23:00:01.010000
&nbsp; Rational Rational::operator + (Rational &amp;s) &nbsp; { &nbsp;&nbsp; &nbsp; Rational temp; &nbsp;&nbsp; &nbsp; temp.fraction = s.fraction+fraction; &nbsp;&nbsp; &nbsp; return temp; &nbsp; } &nbsp;&nbsp;&nbsp;&nbsp; void Rational::operator += (Rational &amp;s) &nbsp; { &nbsp;&nbsp; &nbsp; s.fraction+fraction; &nbsp; }

ну так =+ и + это по сути одна и таже операция, вот s.fraction+fraction; и ссылается на
Rational Rational::operator + (Rational &s)
Post #: 10
RE: не могу перегрузить оператор == - 2010-06-09 16:04:33.766666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Чел, ты что-то путаешь. Во-первых нет оператора =+, во-вторых кто тебе сказал, что += и + это одно и то же? Ты случайно не родственник Вирта?
Post #: 11
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)

вроде разницы нет не так ли. Ты случайно не родственник Вирта?
Post #: 12
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 &amp;s)
{
&nbsp;&nbsp;&nbsp; fraction += s.fraction;
}


вот так это должно выглядеть

quote:

ORIGINAL: Promlol

ну так =+ и + это по сути одна и таже операция, вот s.fraction+fraction; и ссылается на
Rational Rational::operator + (Rational &amp;s)


не ссылается. ты вызываешь double operator+(double, double), т.к. складываешь значения типа double (fraction и s.fraction)
Post #: 13
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)
Post #: 14
RE: не могу перегрузить оператор == - 2010-06-09 23:25:44.400000   
Promlol

Сообщений: 19
Оценки: 0
Присоединился: 2010-04-04 23:00:01.010000
где я шрифт повысил? твои посты особенно помогают я скажу…
Post #: 15
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> не могу перегрузить оператор ==







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.