#include <iostream>
#include <iomanip>
using namespace std;
class Complex
{
private:
double real;
double imag;
public:
Complex();
Complex(double _real,double _imag = 0.0):real(_real),imag(_imag){} //构造函数,初始化列表和默认参数
friend istream& operator>>(istream &input,Complex &a);
friend ostream& operator<<(ostream &ouput,Complex &a);
Complex& Complex::operator=(const Complex &val);
Complex& Complex::operator+=(const Complex &val);
Complex& Complex::operator*=(const Complex &val);
Complex& Complex::operator-=(const Complex &val);
};
Complex operator+(const Complex &lhs, const Complex &rhs); //实现两个复数+操作
Complex operator*(const Complex &lhs, const Complex &rhs); //实现两个复数*操作
Complex operator-(const Complex &lhs, const Complex &rhs); //实现复数-操作
istream& operator>>(istream &input,Complex &a){
input>>a.real>>a.imag;
return input;
}
ostream&operator<<(ostream &output,Complex &a){
output<<a.real<<"+"<<a.imag<<"i"<<endl;
return output;
}
int main(){
Complex c1,c3;
Complex c2(2,4);
cin>>c1;
c3 = c1+c2;
cout<<c3;
return 0;
}
Complex::Complex ()
{
real=0;
imag=0;
}
Complex& Complex::operator=(const Complex &val)
{
real = val.real;
imag = val.imag;
return *this;
}
Complex& Complex::operator+=(const Complex &val)
{
real += val.real;
imag += val.imag;
return *this;
}
Complex& Complex::operator*=(const Complex &val)
{
double tReal = real;
double tImag = imag;
real = tReal*val.real - tImag*val.imag;
imag = tReal*val.imag + tImag*val.real;
return *this;
}
Complex& Complex::operator-=(const Complex &val)
{
real -= val.real;
imag -= val.imag;
return *this;
}
Complex operator+(const Complex &lhs,const Complex &rhs)
{
Complex ret(lhs);
ret += rhs;
return ret;
}
Complex operator*(const Complex &lhs,const Complex &rhs)
{
Complex ret(lhs);
ret *= rhs;
return ret;
}
Complex operator-(const Complex &lhs,const Complex &rhs)
{
Complex ret(lhs);
ret -= rhs;
return ret;
}
这段代码重温刚刚学习过的运算符重载、友元函数、引用、常量等等知识点,在输入输出运算符重载时遇到了阻碍,因为目前对流的认识处于零状态,希望随着自己更加深入的学习,能够更好地理解这段代码,今天就先贴出,便于日后阅读。