两个函数C ++之间的区别

时间:2013-02-27 17:27:04

标签: c++ function

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

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

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

4 个答案:

答案 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 *未声明为该类的成员,则不需要两个这些函数。