如何在C++中重载非交换运算符的两种可能性?

Cis*_*tin 5 c++ operator-overloading complex-numbers

我正在创建一个复数的类,所以我想让它变得更容易,我允许进行诸如a = b + c之类的操作,而不是a = b.add(c).例如,这是我添加两个复数的实现:

// An addition operator for the complex numbers
Complex Complex::operator + (Complex n) {
    return Complex(this->real + n.real, this->imaginary + n.imaginary);
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,添加复数a + b将与添加b + a具有相同的结果.

但是,在处理非交换运算符和整数时会出现问题.例如,除以整数或除以整数.我怎么能这样做:

a =复数/整数

a =整数/复数

给出正确答案?

换句话说,我怎样才能以两种方式重载运算符?

tab*_*top 8

如果将运算符编写为自由函数而不是类成员,则可以指定两个操作数.

Complex operator/ (int lhs, Complex rhs);
Complex operator/ (Complex lhs, int rhs);
Run Code Online (Sandbox Code Playgroud)

如果您需要访问私人成员,您可能必须使它们成为朋友功能.

(我会留给你决定你是否需要int,或者浮动,或者前面的任何东西.)

编辑:更完整的例子可能是:

Complex operator/ (int lhs, Complex rhs) {
    Complex answer;
    double mag = rhs.real*rhs.real+rhs.imag*rhs.imag;
    answer.real = lhs*rhs.real/mag;
    answer.imag = -lhs*rhs.imag/mag;
    return answer;
}
Run Code Online (Sandbox Code Playgroud)

然后稍后:

f = 6/f;
Run Code Online (Sandbox Code Playgroud)

(我再次假设公共成员变量易于使用).