Home > Enterprise >  Operator overloading changes operands
Operator overloading changes operands

Time:10-10

This is my try to explain my previous question more, since the previous one didn't get the answers I need.

Suppose I have two classes, the first class is a Symbol, it has a char, (double)coefficient, and (double)power. Overloading the minus operator is in this way:

public static Symbol operator -(Symbol symbol)
    => new(symbol.symbol, -symbol.Coefficient, symbol.Exponent);

And I have the following code:

Symbol sym = new('x', 3, 1);
Console.WriteLine(-sym); // output: -3*x
Console.WriteLine(sym);  // output: 3*x

At this point, it all makes sense, but when I have the second class, Polynomial, that is a list of symbols, and I have the following minus overloading function:

public static Polynomial operator -(Polynomial polynomial)
{

    Polynomial result = polynomial;

    for (int i = 0; i < result.container.Count; i  )
        result.container[i] = -result.container[i];

    return result;
}

The container[i] here is a Symbol object.

When I execute the following:

Console.WriteLine(polynomial); // output: 3*x   2*y
Console.WriteLine(-polynomial); // output: -3*x - 2*y
Console.WriteLine(polynomial); // output: -3*x - 2*y

Whereas the last expected output should be '3x 2y'

So what I should do to solve this problem?

CodePudding user response:

You should create a new instance of Polynomial just like what you did in the Symbol class.

public static Polynomial operator -(Polynomial polynomial)
{
    Polynomial result = new Polynomial { container = new List<Symbol>() };

    for (int i = 0; i < polynomial.container.Count; i  )
        result.container.Add(-polynomial.container[i]);

    return result;
}
  • Related