【发布时间】:2012-06-11 23:04:54
【问题描述】:
我正在编写一个表示序数刻度的类,但没有逻辑零点(例如时间)。
这个比例应该允许加法和减法(operator+,operator+=,...),但不允许乘法。
然而,我一直认为这是一种很好的做法,即当重载某个组的一个运算符(在本例中为数学运算符)时,还应该重载属于该组的所有其他运算符。在这种情况下,这意味着我还需要重载乘法和除法运算符,因为如果用户可以使用A+B,他可能希望能够使用其他运算符。
有没有一种方法可以在编译时为此引发错误?最简单的方法是不重载运算符operator*,......但添加比operator* is not know for class "time" 更多的解释似乎是合适的。
或者这是我真的不应该关心的事情(RTFM 用户)?
【问题讨论】:
-
我已经使用
+和std::strings很长时间了,但从来没有 - 甚至没有一次 - 我期望与他们一起使用*或-... -
@John Dibling:Ruby 中的
"a" * "b"或"a" - "b"是什么? -
语法错误。但
"a" * 5不是。 -
@John Dibling:Ruby 中的
"a" + 5是什么? C++ 中的std::string("a") + 5呢? ...明白我的意思吗? -
我认为将加法和乘法分组是没有意义的。甚至没有加减法。有意义的是,如果您提供
operatorX,您还应该提供operatorX=(如果它可以比前者更有效),另外,如果您提供==,您应该提供!=(根据前者),operator<有时可以与operator>匹配,有时甚至可以与operator<=匹配,但这取决于域...通常答案是您应该重载那些在 领域的问题。
标签: c++ error-handling compiler-errors operator-overloading