Привет, у меня есть программа ниже, и я новичок в C #,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace UnaryOperatorOverLoad
{
    public class UnaryOperator
    {
        private int Number1;
        private int Number2;
        private int Result;
        public UnaryOperator() { }
        public UnaryOperator(int number1, int number2)
        {
            Number1 = number1;
            Number2 = number2;
        }
        public static UnaryOperator operator +(UnaryOperator opr)
        {
            UnaryOperator obj = new UnaryOperator();
            obj.Result = obj.Number1 + obj.Number2;
            return obj;
        }
        public void showdata()
        {
            Console.WriteLine("The Sum of Two Numbers is : " + Result);
        }
    }
    public class Program
    {
        static void Main(string[] args)
        {
            UnaryOperator opr = new UnaryOperator(20, 30);
            opr.showdata();
            Console.ReadLine();
        }
    }

}

Когда я выполняю код, я получаю результат 0. Я не уверен, где я ошибся. Пожалуйста, помогите мне исправить код.

0
user3027039 6 Апр 2014 в 15:07
2
Вы отладили свой код, чтобы понять, почему значение Result равно 0?
 – 
Farhad Jabiyev
6 Апр 2014 в 15:09
Верно. Я уже вижу проблему. Запуск в режиме отладки поможет вам найти его!
 – 
John3136
6 Апр 2014 в 15:11
1
Во-первых, вы никогда не звоните оператору +. Во-вторых, даже если вы вызываете его, в операторе + вы суммируете NUmber1 и Number2 из нового UnaryOperator, что означает, что его результат все равно будет 0+0=0. Видеть это?
 – 
Tomas Pastircak
6 Апр 2014 в 15:13

2 ответа

Лучший ответ

Ваши ошибки:

  • Вы создаете новый UnaryOperator obj = new UnaryOperator(); в функции перегрузки оператора. Итак, значение obj.Number1 и obj.Number2 равно 0, потому что вы только что создали экземпляр obj.
  • Вы никогда не звоните оператору +. Добавьте оператор opr = +opr; в метод Main.

Измените свой код как:

public class UnaryOperator
{
    private int Number1;
    private int Number2;
    private int Result;

    public UnaryOperator() { }
    public UnaryOperator(int number1, int number2)
    {
        Number1 = number1;
        Number2 = number2;
    }

    public static UnaryOperator operator +(UnaryOperator opr)
    {
        opr.Result = opr.Number1 + opr.Number2;  // Change this line
        return opr;
    }

    public void showdata()
    {
        Console.WriteLine("The Sum of Two Numbers is : " + Result);
    }
}

public class Program
{
    static void Main(string[] args)
    {
        UnaryOperator opr = new UnaryOperator(20, 30);
        opr = +opr;  // Add this statement
        opr.showdata();
        Console.ReadLine();
    }
}
1
Farhad Jabiyev 6 Апр 2014 в 15:30
: Спасибо за решение.
 – 
user3027039
6 Апр 2014 в 15:19
1
Рад помочь. Не забудьте отметить это как ответ. Вы можете нажать на галочку рядом с ответом, чтобы переключить его с пустого на зеленый.
 – 
Farhad Jabiyev
6 Апр 2014 в 16:31

Эта строка кода

UnaryOperator opr = new UnaryOperator(20, 30);

Создает новый объект UnaryOPerator и устанавливает Number1 и Number2 равными 20 и 30 соответственно.

Затем вы вызываете opr.showdata();, который выводит на консоль значение переменной Result. Однако, поскольку вы не выполняли никакого сложения, значение переменной будет по умолчанию 0. Это причина, по которой вы получили 0.

Дополнительное примечание : я не понимаю, почему вы затягиваете, чтобы перегружать дополнение так, как вы это делаете. Разумно захотеть перегрузить добавлением двух настраиваемых объектов, например UnaryOperator. Однако мне кажется немного странным, что вы пытаетесь перегрузить добавление тем способом, которым вы это делаете. Кроме того, поскольку оператор + имеет два операнда, вы должны определить их, как показано ниже (возможно, это не та перегрузка, о которой вы думали, но это правильная форма в общих чертах):

public static UnaryOperator operator +(UnaryOperator unaryOperator1, UnaryOperator unaryOperator2)
{
    return new UnaryOperator(unaryOperator1.Number1+unaryOperator2.Number1,
                             unaryOperator1.Number2+UnaryOperator2.Number2);
}

Для этой работы вам нужно будет изменить определение вашего класса на следующее:

public class UnaryOperator
{
    public int Number1 { get; set; } 
    public int Number2 { get; set; }

    public UnaryOperator(int number1, int number2)
    {
        Number1 = number1;
        Number2 = number2;
    }

    public static UnaryOperator operator +(UnaryOperator unaryOperator1, UnaryOperator unaryOperator2)
    {
        return new UnaryOperator(unaryOperator1.Number1+unaryOperator2.Number1,
                             unaryOperator1.Number2+unaryOperator2.Number2);
    }

    public void ShowData()
    {
        Console.WriteLine("Number1: {0}, Number2: {1}", Number1, Number2);
    }
}

Метод Main должен измениться на следующий:

public class Program
{
    static void Main(string[] args)
    {
        // Declare the first UnaryOperator object.
        UnaryOperator opr1 = new UnaryOperator(20, 30);
        // Declare the second UnaryOperator object.
        UnaryOperator opr2 = new UnaryOperator(10, 40);
        // Add them using the overloaded version of the + operator
        UnaryOperator result = opr1+opr2;
        // Show the results
        result.ShowData();
        Console.ReadLine();
     }
}

Как я сказал выше, это может быть не совсем версия вашей перегрузки оператора +, но я написал реализацию этой перегрузки, чтобы увидеть, как она работает. Дополнительную документацию см. здесь .

0
Christos 6 Апр 2014 в 15:39