Перегруженные операции - C#

Узнай цену своей работы

Формулировка задачи:

Во есть код:
using System;
class Money
{
    int rub;            //рубли
    int kop;            //копейки 
    public void Set()   //функция ввода данных
    {
        Console.Write("\n Введите значение рублей: ");
        rub = Convert.ToInt32(Console.ReadLine());
        Console.Write("\n Введите значение копеек:");
        kop = Convert.ToInt32(Console.ReadLine());
        kop = kop % 100;
    }
    public void Show() 
    {
        Console.WriteLine(" На счету " + rub + " рублей " + kop + " копеек");
 
    }
    public static Money operator +(Money op1, Money op2)//перегрузка оператоа +
    {
        Money ob = new Money();
        ob.rub = op1.rub + op2.rub;
        if ((op1.kop + op2.kop) >= 100) ob.rub++;
        ob.kop = (op1.kop + op2.kop) % 100;
        return ob;
    }
    public static Money operator -(Money op1, Money op2)//перегрузка опреатора -
    {
        Money ob = new Money();
        ob.rub = op1.rub - op2.rub;
        ob.kop = op1.kop - op2.kop;
        if (ob.kop < 0) ob.rub--;
        op2.kop = Math.Abs(ob.kop);
        if (ob.rub < 0)
        {
            ob.rub = 0;
            ob.kop = 0;
        }
        return ob;
    }
    public static Money operator ++(Money m1)//перегрузка оператоа ++
    {
        m1.rub++;
        return m1;
    }
    public static Money operator --(Money m1)//перегрузка оператора --
    {
        if (m1.rub == 0)
        {
            m1.rub = 0;
            m1.kop = 0;
        }
        else
        {
            m1.rub--;
        }
        return m1;
    }
}
 
class Program
{
    static void Main()
    {
        Money m1 = new Money();//1-ый экземпляр класса Money
        Money m2 = new Money();//2-ой экземпляр класса Money 
        Money m3 = new Money();//3-ий экземпляр класса Money
        Console.WriteLine("\n Введите значения 1-го объкта");
        m1.Set();
        Console.WriteLine("\n Введите значения 2-го объекта");
        m2.Set();
        Console.WriteLine("\n Вывод 1-го объекта:");
        m1.Show();
        Console.WriteLine("\n Вывод 2-го объекта");
        m2.Show(); Console.WriteLine(" ");
        m3 = m1 - m2;
        Console.WriteLine("\n Разница 1-го и 2-го объекта");
        m3.Show();
        m3 = m1 + m2;
        Console.WriteLine("\n Сумма 1-го и 2-го объета");
        m3.Show();
        m1++;
        Console.WriteLine("\n Добавления рубля к 1-ому обекту");
        m1.Show();
 }
}
Здесь складываются, вычитаются, додаётся рубль , отнимается рубль от вводимых пользователем денег . Но работает всё как-то не всегда правильно . Проблемы возникли с перегрузкой операций + и - . Если , например , вводим 5 руб. и 70 коп . + 4.руб и 40 коп. , то сумма будет -10 . 00 руб. , а не 10.10 . И с операцией "-" проблема , если значение копеек 1-го объекта меньше значения копеек 2-го объекта , то считаются они просто со знаком "-". Помогите пожалуйста , как можно решить эти проблемы? Вроде всё нормально написано( Заранее огромное спасибо!

Решение задачи: «Перегруженные операции»

textual
Листинг программы
  Money ob = new Money();
            ob.rub = op1.rub + op2.rub;
            ob.kop = op1.kop + op2.kop;
            if ((ob.kop) >= 100)
            {
                ob.rub++;
                ob.kop -= 100;
               
            }
            
            return ob;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5
Похожие ответы