如果有一个班级Cow
,并且它有两个实例 - cowA
和cowB
- 这是否被接受?
if (cowA > cowB)
{
}
如果是这样,为什么?
答案 0 :(得分:2)
如果被接受,你的意思是良好的做法,那么简短的回答是:没有错。更具体地说,如果在使用对象的上下文中,比较(大于和小于)具有直观意义,那么运算符重载并不是一件坏事。
另一方面,如果比较可能具有含糊不清的含义,那么最好使用具有描述性特征含义的特定含义的函数。在一天结束时,我们希望代码能够让读者明白其意图。
答案 1 :(得分:1)
如果Cow
重载>
运算符,则完全可以接受。它当然不会默认,但你可以定义它!
操作符只是特殊的函数,所以如果你编写一个带有Cow
个对象的函数,编译器/运行时就不会抱怨。
如果Cow对数字类型进行了隐式转换,那么该行也是有效的,尽管这不太可能;)
要重载>
运算符,您可以执行以下操作:
public static bool operator < (Cow x, Cow y)
{
return x.Age < y.Age;
}
显然我编造了比较逻辑:)
请注意,如果您这样做,则还需要重载>
。见MSDN