2014-11-10 3 views
-2
 public override string ToString() 
     { 
      return numerator + "/" + denominator; 
     } 
     class TestRational 
     { 
      static void Main() 
      { 
       Rational x, y, z; 
       x = new Rational(7, 4); 
       y = new Rational(2, 3); 
       z = x ‐ y; 
       Console.WriteLine(x + " ‐ " + y + " = " + z); 
       Console.ReadLine(); 
      } 
     } 
    } 
} 

мне нужно преобразовать этот код, чтобы снова функцию перегрузки оператора, но и для операндов ==! = <> это поворачиваются значение BOOL я не удалось найти правильный путь Просьба помочьПерегрузка операторов с ==! =><

public static bool operator ==(Rational op1, Rational op2) 
     { 
      bool status = false; 
      if (op1 == op2) 
      { 
       status = true; 
      } 
      return status; 
     } 

этот путь правильный?

+0

я должен показать это рациональные числа с операндами ==! = < > с помощью оператора перегружать –

+0

право, но вы пытаетесь писать код для этих операторов? Если да, покажите нам, что вы пробовали, и сообщите нам, почему это не сработало. Включите любые ошибки компиляции, исключения или неудачные тестовые примеры. В принципе, SO - это не просто попросить людей написать код для вас. – juharr

ответ

0
public static bool operator ==(Rational op1, Rational op2) 
    { 
     return op1.numerator * op2.denominator == op1.denominator * op2.numerator; 
    } 
    public static bool operator !=(Rational op1, Rational op2) 
    { 
     return op1.numerator * op2.denominator != op1.denominator * op2.numerator; 
    } 
    public static bool operator <(Rational op1, Rational op2) 
    { 
     return op1.numerator * op2.denominator < op1.denominator * op2.numerator; 
    } 
    public static bool operator >(Rational op1, Rational op2) 
    { 
     return op1.numerator * op2.denominator > op1.denominator * op2.numerator; 
    } 
+0

как насчет моей 'Console.WriteLine' –

+0

' Console.WriteLine (x.ToString() + "-" + y.ToString() + "=" + z.ToString()); ' –

+0

Я сделал это путь' Консоль .WriteLine ("{0} == {1} = {2}", x, y, x == y); 'его работа –

0

В настоящее время у вас есть проблема с круговой логикой, которая приведет к бесконечному циклу. Вы определили, как сравнить два объекта Rational с оператором ==, но затем вы используете этот оператор в коде. Вместо этого вам нужно определить, что делает два Rational s равными. Может быть, это так просто, как это:

public static bool operator ==(Rational op1, Rational op2) 
{ 
    return op1.numerator == op2.numerator && op1.denominator == op2.denominator; 
} 

Конечно, это не было бы сказать, что 1/2 и 2/4, равны, но вы должны решить, что логика здесь реализовать. Затем вы можете использовать оператор == при определении оператора !=, но вам просто нужно убедиться, что вы не закончите с круговым логическим типом любого типа, например, с помощью == в != и != в ==.

Смежные вопросы