我试图在示例C#控制台应用程序中重载-
减号运算符,但是我收到一个我不明白的错误。我正在从this书中学习,但勘误表并未将此列为拼写错误或错误。重载的+
运算符工作正常但-
没有。
关于我做错的任何想法?
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;
答案 0 :(得分: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
答案 1 :(得分:3)
您未正确重载-
运算符。您需要binary operator
,
public static AddClass1 operator -(AddClass1 p1, AddClass1 p2)
{
AddClass1 returnVal = new AddClass1();
returnVal.val = p1.val - p2.val;
return returnVal;
}
答案 2 :(得分:3)
你已经超载了一元减号;你应该重载二进制文件。
public static AddClass1 operator -(AddClass1 p1, AddClass1 p2)
{
return new AddClass1 { val = p1.val-p2.val };
}
答案 3 :(得分:2)
您重载了一元否定运算符,而不是二进制子运算符。由于你有超载,你可以写:
AddClass1 negation = -i;
甚至:
AddClass1 difference = i + (-j);
写:
AddClass1 difference = i - j;
你需要重载
public static AddClass1 operator -(AddClass1 p1, AddClass1, p2)
运算符。
答案 4 :(得分:1)
你的班级只有一元减负荷。所以,这将有效:
AddClass1 difference = i + (-j);
允许你的表达式(i - j
)只是重载二进制减去(比如二进制加上重载)
答案 5 :(得分:1)
您没有将其定义为二进制(接受两个值)运算符。你所定义的是否定。试试这个:
public static AddClass1 operator -(AddClass1 p1, AddClass1 p2)
{
AddClass1 returnVal = new AddClass1();
returnVal.val = p1.val - p2.val;
return returnVal;
}
答案 6 :(得分: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();
}
}
}