0

サンプル C# コンソール アプリケーションでマイナス演算子をオーバーロードしようとして-いますが、理解できないエラーが発生します。私はこの本から学んでいますが、正誤表にはこれがタイプミスまたはエラーとしてリストされていません。オーバーロードされ+た演算子は正常に機能しますが、そうで-はありません。

私が間違っていることについてのアイデアはありますか?

namespace ConsoleApplication1
{
    class AddClass1
    {
        public int val;

        public static AddClass1 operator +(AddClass1 p1, AddClass1 p2)
        {
            AddClass1 returnVal = new AddClass1();
            returnVal.val = p1.val + p2.val;
            return returnVal;
        }

        public static AddClass1 operator -(AddClass1 p1)
        {
            AddClass1 returnVal = new AddClass1();
            returnVal.val = -p1.val;
            return returnVal;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            AddClass1 i = new AddClass1();
            i.val = 10;
            AddClass1 j = new AddClass1();
            j.val = 5;
            AddClass1 sum = i + j;
            AddClass1 difference = i - j;

            Console.WriteLine(sum.val);
            Console.WriteLine(difference.val);
        }
    }
}

エラー

Error   1   Operator '-' cannot be applied to operands of type 'ConsoleApplication1.AddClass1' and 'ConsoleApplication1.AddClass1'  c:\users\admin\documents\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs 37  36  ConsoleApplication1

この行で

AddClass1 difference = i - j;
4

7 に答える 7

4

-二項演算子をオーバーロードする必要があります。

public static AddClass1 operator -(AddClass1 p1, AddClass1 p2)
{
    AddClass1 returnVal = new AddClass1();
    returnVal.val = p1.val - p2.val;
    return returnVal;
}

だからあなたはそれを次のように使うことができますc = a + b


あなたがしたことは単項です-

public static AddClass1 operator -(AddClass1 p1)
{
    AddClass1 returnVal = new AddClass1();
    returnVal.val = -p1.val;
    return returnVal;
}

このように使用できるもの

AddClass1 j = new AddClass1();
j.val = 5;
AddClass1 negative = -j;//this is what you have done
于 2013-10-21T14:59:52.807 に答える
3

単項マイナスをオーバーロードしました。バイナリをオーバーロードする必要があります。

public static AddClass1 operator -(AddClass1 p1, AddClass1 p2)
{
    return new AddClass1 { val = p1.val-p2.val };
}
于 2013-10-21T15:00:08.710 に答える
1

あなたのクラスには、単項マイナスのオーバーロードしかありません。したがって、これは機能します:

AddClass1 difference = i + (-j);

expression( i - j) を許可するには、バイナリ マイナスをオーバーロードするだけです (バイナリ プラス オーバーロードのように)

于 2013-10-21T14:59:58.840 に答える
0
namespace ConsoleApplication1
{
    class AddClass1
    {
        public int val;

        public static AddClass1 operator +(AddClass1 p1, AddClass1 p2)
        {
            AddClass1 returnVal = new AddClass1();
            returnVal.val = p1.val + p2.val;
            return returnVal;
        }

        public static AddClass1 operator -(AddClass1 p1, AddClass1 p2)
        {
            AddClass1 returnVal = new AddClass1();
            returnVal.val = p1.val - p2.val;
            return returnVal;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            AddClass1 i = new AddClass1();
            i.val = 10;
            AddClass1 j = new AddClass1();
            j.val = 5;
            AddClass1 sum = i + j;
            AddClass1 difference = i - j;

            Console.WriteLine(sum.val);
            Console.WriteLine(difference.val);
            Console.ReadLine();
        }
    }
}
于 2013-10-21T15:02:57.340 に答える