#include<iostream>
using namespace std;
class complex
{
double t, n; //t为实部 n为虚部
public:
complex(double T = 0, double N = 0) : t(T), n(N) {} //初值为0构造函数
~complex() { }
double getT() { return t; }
double getN() { return n; }
complex operator+(const complex& a) { //+重载
complex b;
b.t = t + a.t;
b.n = n + a.n;
return b;
}
complex operator-(const complex& a) { //-重载
complex b;
b.t = t - a.t;
b.n = n - a.n;
return b;
}
complex operator*(const complex& a) { //*重载
complex b;
b.t = t * a.t;
b.n = n * a.n;
return b;
} complex operator/(const complex& a) { //‘/’重载
complex b;
b.t = (t * a.t + n * a.n) / (a.t * a.t + a.n * a.n);
b.n = (-t * a.n + n * a.t) / (a.n * a.n + a.t * a.t);
return b;
}
friend ostream& operator<<(ostream& cout, complex& p);
};
ostream& operator<<(ostream& c, complex& p) { //<<重载
c<< p.t ;
if (p.n > 0)return c<< "+" << p.n<<"i";
else if(p.n < 0)return c<< p.n<<"i";
}
int main()
{
double x, y, z, w;
cin >> x >> y >> z >> w;
complex a(x, y), b(z, w), c;
c = a + b; cout << c << endl;
c = a - b; cout << c << endl;
c = a * b; cout << c << endl;
c = a / b; cout << c << endl;
return 0;
}
重载左移运算符时返回值类型为ostream&,之后可以对返回的值连续操作。
重载左移运算符也可为:
ostream& operator<<(ostream& cout, complex& p) { //<<重载
cout<< p.t ;
if (p.n > 0)return cout<< "+" << p.n<<"i";
else if(p.n < 0)return cout<< p.n<<"i";
}
若传入为ostream& c(c实际是cout的别称),则函数中c、cout可混用;
传入为ostream& cout,函数体中不能用别称。
菜鸡代码,评论(如果有)大佬说的都对/doge