我的班级女巫问题我用于复杂的数字。我想将两个复数相乘,我想返回两个值(re,im)。我使用重载运算符,但我不知道如何返回两个值。我想要使用这个公式(a1 + b1i) ∗ (a2 + b2i) = (a1a2 − b1b2 + (a1b2 +a2b1)i)
。我想要返回re + im。
这是我的代码:
class Complex{
private:
double realteil;
double imaginearteil;
public:
Complex(){
imaginearteil=0;
realteil=0;
}
Complex(double real): realteil(real){
imaginearteil = 0;
}
Complex(double real, double imaginear){
this -> realteil = real;
this -> imaginearteil = imaginear;
}
double abs() const{
double result = this -> realteil * this -> realteil + this -> imaginearteil * this -> imaginearteil;
result = pow(result,0.5);
return result;
}
Complex konjugiert() const{
Complex result;
result.realteil = this -> realteil;
result.imaginearteil = this -> imaginearteil - 2*imaginearteil;
return result;
}
Complex operator + (const Complex &c){
Complex result;
result.realteil = this -> realteil + c.realteil;
result.imaginearteil = this -> imaginearteil + c.imaginearteil;
return result;
}
Complex operator - (const Complex &c){
Complex result;
result.realteil = this -> realteil - c.realteil;
result.imaginearteil = this -> imaginearteil - c.imaginearteil;
return result;
}
Complex operator * (const Complex &b){
return ((this -> realteil * b.realteil) - (this -> imaginearteil * b.imaginearteil))
- ((this -> realteil * b.imaginearteil) + (b.realteil * this -> imaginearteil));
}
Complex operator / (const Complex &b){ }
ostream& printPolar(ostream&) const{
double temp = realteil*realteil + imaginearteil*imaginearteil;
double r = pow(temp,0.5);
double Q;
if(r == 0){
Q=0;
}
if(imaginearteil >=0) {
Q = acos(realteil/r);
}
if(imaginearteil < 0){
Q = -acos(realteil/r);
}
}
friend ostream& operator << (ostream& output, const Complex& a);
};
ostream& operator << (ostream& output, const Complex& a){
if(a.imaginearteil == 0)
output << a.realteil;
if(a.imaginearteil < 0)
output << a.realteil <<a.imaginearteil<<"i";
if(a.imaginearteil > 0)
output << a.realteil <<"+" <<a.imaginearteil<<"i";
return output;
}
int main() {
Complex a,b(3),c(7,2),d(1.5,-3.2);
cout <<c<<endl;
cout <<c.konjugiert();
a = c*d;
cout << a;
//cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
// Complex x=(b+2)*(c-d.abs())/(b-c.konjugiert()*d);
return 0;
}
我想在main()
Complex a,b(3),c(7,2),d(1.5,-3.2);
cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
Complex x=(b+2)*(c-d.abs())/(b-c.konjugiert()*d);
cout<<x<<" ";
x.printPolar(cout);
cout<<endl;
我喜欢这个结果,除了这个结果:
0 3 7+2i 1.5-3.2i
0.363472-0.698001i (0.786967,-1.0907)
1-3.5i
另一个问题,如何从Q,r
退回两个值ostream& printPolar(ostream&) const
?
答案 0 :(得分:1)
Complex operator * (const Complex &b) const {
Complex result(
realteil * b.realteil - imaginearteil*b.imaginearteil, // real part
realteil * b.imaginearteil + b.realteil * imaginearteil // img part
);
return result;
}
我省略了明确使用`` this-&gt; &#39;&#39;操作