Перегрузка операторов C# (Меняются исходные операнды)

программирование C# ООП операторы

public static Loshara operator +(Loshara a,Lashara b)
{return new Loshara(a.lol+b.lol,a.xd+b.xd);} - перегрузка оператора в классе Loshara
Тело программы:
c = a+b; где a,b,c - экземпляры лошар.

Почему у меня в результате выполнения этой перегрузки оператора а принимает значение a+b и c принимает a+b, а не только c?!

Примечание:
class Loshara
{
private int lol;
private int xd;
public Loshara(int a1, int a2)
{
lol=a1;
xd=a2
}
public static Loshara operator + (Loshara a, Loshara b)
{return new Loshara(a.lol+b.lol,a.xd+b.xd);}
public static Loshara operator - (Loshara a, Loshara b)
{return new Loshara(a.lol-b.lol,a.xd-b.xd);}
}
Далее код программы
{
...
Loshara loh1 = new Loshara(4,5);
Loshara loh2 = new Loshara(5,3);
Loshara loh3;
loh3=loh1+loh2;
...
}
loh3 и loh1 - получаются равными!

Примечание:
class Mnogochlen
{
private readonly int[] factor;
public Mnogochlen()
{
factor = new int[1];
factor[0] = 0;
}//Если без параметров
public Mnogochlen(int[] input)
{
factor = input;
}//В качестве параметра поступает массив коэф.
public override string ToString()//Для вывода многочлена
{
string s="";
for (int i = factor.Length-1; i > 0; i--) s += factor[i] + "x^" + i+" + ";
s += factor[0];
return s;
}
public static Mnogochlen operator +(Mnogochlen a, Mnogochlen b)
{
int[] factorofnew;
int iterations;
{
if (a.factor.Length >= b.factor.Length)
{
factorofnew = new int[a.factor.Length];
factorofnew = a.factor;
iterations = b.factor.Length-1;
}
else
{
factorofnew = new int[b.factor.Length];
factorofnew = b.factor;
iterations = a.factor.Length-1;
}
}
for (int i = iterations; i >= 0; i--)
{
factorofnew[i] = (a.factor[i] + b.factor[i]);
}
return new Mnogochlen(factorofnew);
}
public static Mnogochlen operator -(Mnogochlen a, Mnogochlen b)
{
int[] factorofnew;
int iterations;
{
if (a.factor.Length >= b.factor.Length)
{
factorofnew = new int[a.factor.Length];
factorofnew = a.factor;
iterations = b.factor.Length - 1;
}
else
{
factorofnew = new int[b.factor.Length];
factorofnew = b.factor;
iterations = a.factor.Length - 1;
}
}
for (int i = iterations; i >= 0; i--)
{
factorofnew[i] = (a.factor[i] - b.factor[i]);
}
return new Mnogochlen(factorofnew);
}
Ладно, хотел абстрактный пример. Вот собственно этот класс не работает как надо.
namespace Polinomizm
{
class Program
{
static public void Main()
{
int[] demo1 = new int[5];
for (int i=0; i<5;i++)
{
demo1[i]=i;
}
Mnogochlen a = new Mnogochlen(demo1);
demo1 = new int[4];
for (int i=0; i<4;i++)
{
demo1[i]=i*2;
}
Mnogochlen b = new Mnogochlen(demo1);
Mnogochlen c;
Console.WriteLine("A = "+a.ToString());
Console.WriteLine("B = " + b.ToString());
c=a+b;
Console.WriteLine("Операция сложения прошла");
Console.WriteLine("A = " + a.ToString());
Console.WriteLine("B = " + b.ToString());
Console.WriteLine("C = "+c.ToString());
c = a - b;
Console.WriteLine("Операция вычитания прошла");
Console.WriteLine("A = " + a.ToString());
Console.WriteLine("B = " + b.ToString());
Console.WriteLine("C = " + c.ToString());
Console.ReadLine();
}
}
}
Вот весь код, и он не робит(

Примечание:
ВСЁ, Разобрался. Приходиться работать поэлементно:)
Ответы:
Покажите код класса Loshara полностью, а также тестовый пример, на котором видно, описанное Вами, поведение.
В Вашем примере не хватает вывода содержимого переменных, на основании которого можно было бы заключить о равенстве или различии loh3 и loh1. Я этот вывод добавил, и у меня переменные получаются разными.
Здесь:
factorofnew = new int[a.factor.Length];
factorofnew = a.factor;
и здесь:
factorofnew = new int[b.factor.Length];
factorofnew = b.factor


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.