-1

我必须用 C++ 编写这两个函数,其中Complex是一个类:

const Complex operator*(const Complex&, double);
const Complex operator*(double, const Complex&);

我知道如何写它们,但我不知道它们之间有什么区别。你能帮助我吗?

4

4 回答 4

6

不同的是它们会在不同的情况下被调用:

Complex c;
c * 10.0; // Will call the first
10.0 * c; // Will call the second

左操作数始终是重载运算符函数的第一个参数,右操作数始终是第二个参数。在这种情况下,您可以轻松地根据另一个定义一个。但是,有时您可能需要一个非交换运算符,这是允许的。

于 2013-02-27T17:28:37.070 回答
3

第一个是Complex在左侧与 a 相乘:complex * 2.0

第二个是Complex在右侧与 a 相乘:2.0 * complex

于 2013-02-27T17:28:21.037 回答
1

好吧,第一个参数将双精度数作为第一个参数,将复数作为第二个参数,而第二个参数将复数作为第一个参数,将双精度数作为第二个参数。由于复数的乘法是对称的,因此假设您交换相同的参数,两者都会给出相同的结果。在其他情况下,对于某些非对称操作,您仍然可能有不同的操作员行为,这就是您需要同时实现这两种操作的原因。

于 2013-02-27T17:28:32.260 回答
0

所有的答案都很好,所以我没有什么要补充的。但很可能你的类有一个构造函数,它使用像 double 这样的标量类型提供复数的构造。因此,如果此构造函数未声明为显式且 operator* 未声明为该类的成员,则您不需要这两个函数。

于 2013-02-27T18:03:19.623 回答