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 =整数/复数
给出正确答案?
换句话说,我怎样才能以两种方式重载运算符?
如果将运算符编写为自由函数而不是类成员,则可以指定两个操作数.
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)
(我再次假设公共成员变量易于使用).