我必须在C ++中编写这两个函数,其中Complex
是一个类:
const Complex operator*(const Complex&, double);
const Complex operator*(double, const Complex&);
我知道如何写它们但我不知道它们之间有什么区别。你能救我吗?
答案 0 :(得分:6)
不同之处在于它们将在不同情况下被调用:
Complex c;
c * 10.0; // Will call the first
10.0 * c; // Will call the second
左操作数始终是重载操作符函数的第一个参数,右操作数始终是第二个参数。在这种情况下,您可以轻松地根据另一个定义一个。但是,偶尔您可能需要一个非交换运算符,这允许。
答案 1 :(得分:3)
第一个是左侧有Complex
的乘法:complex * 2.0
第二个是右侧乘以Complex
的乘法:2.0 * complex
答案 2 :(得分:1)
首先,第一个参数使用double作为第二个参数,而第二个参数使用复数作为第二个参数,而第二个参数使用复数。由于复数的乘法是对称的,假设您传递相同的参数,两者都会给出相同的结果。在其他情况下,对于某些非对称操作,您可能会有不同的运算符行为,这就是您需要实现这两种操作的原因。
答案 3 :(得分:0)
所有答案都很好,所以我没有任何补充。 但很可能你的类有一个构造函数,它使用像double这样的标量类型来提供复数的构造。因此,如果此构造函数未声明为显式且operator *未声明为该类的成员,则不需要两个这些函数。