含友元函数运算符重载(含输入输出重载)的复数类

发布时间 2023-04-22 16:00:54作者: 找回那所有、

实现一个复数类,要求重载加减乘除及输入输出,输出保留两位小数。

依次输出加减乘除的结果。

例:

输入:

3 4

7 8

输出 (提示:当虚部不能出现+-yi,--yi等情况)

10.00+12.00i
-4.00-4.00i
-11.00+52.00i
0.47+0.04i

输入:

0 0
5 0

输出 (提示:当虚部为时,可以不输出)

5
-5
0
0

using namespace std;
class ComplexNumber
{
private:
    double real,imag;
public:
    ComplexNumber(double r=0,double i=0);//构造函数设默认值,或者重载构造函数 
    ComplexNumber operator +(ComplexNumber &);//注意,这里只需要传一个参数,运算符+重载功能上类似自定义的.add()函数 
    ComplexNumber operator -(ComplexNumber &);
    ComplexNumber operator *(ComplexNumber &);
    ComplexNumber operator /(ComplexNumber &);
    friend istream& operator>>(istream &in,ComplexNumber &);
    friend ostream& operator<<(ostream &out,const ComplexNumber &);
};

ComplexNumber::ComplexNumber(double r,double i)//类外定义时无需再写默认值 
{
    real=r;
    imag=i;
}

ComplexNumber ComplexNumber::operator +(ComplexNumber &z) 
{
    ComplexNumber tmp;
    tmp.real=real+z.real;
    tmp.imag=imag+z.imag;
    return tmp;
}

ComplexNumber ComplexNumber::operator -(ComplexNumber &z)
{
    ComplexNumber tmp;
    tmp.real=real-z.real;
    tmp.imag=imag-z.imag;
    return tmp;
}

ComplexNumber ComplexNumber::operator *(ComplexNumber &z)
{
    ComplexNumber tmp;
    tmp.real=real*z.real-imag*z.imag;//这里注意一下运算规则 
    tmp.imag=real*z.imag+z.real*imag;
    return tmp;
}

ComplexNumber ComplexNumber::operator/(ComplexNumber &z)
{
    ComplexNumber tmp;
    tmp.real=(real*z.real+imag*z.imag)/(z.real*z.real+z.imag*z.imag);//这里可能需要上网查一下怎么计算 
    tmp.imag=(z.real*imag-real*z.imag)/(z.real*z.real+z.imag*z.imag);
    return tmp;
}

istream& operator>>(istream &in,ComplexNumber &z)
{
    in >> z.real >> z.imag;//注意类有两个属性,都要输入 
    return in;
}

ostream& operator<<(ostream &out,const ComplexNumber &z)
{
    if(z.imag>0)
    {
        out<<fixed<<setprecision(2)<<z.real;
        out<<"+"<<fixed<<setprecision(2)<<z.imag<<"i";
        return out;
    }
    else if(z.imag<0)
    {
        out<<fixed<<setprecision(2)<<z.real;
        out<<fixed<<setprecision(2)<<z.imag<<"i";
        return out;
    } 
    else if(z.imag==0)
    {
        out<<z.real;
        return out;
    }
}
//StudybarCommentBegin
#include <iostream>
#include <iomanip>
#include <string>
//StudybarCommentEnd
//StudybarCommentBegin
void CN() { //ComplexNumber
	ComplexNumber cn1, cn2;
	std::cin >> cn1 >> cn2;
	std::cout<<cn1+cn2 << std::endl;
	std::cout<<cn1 - cn2 << std::endl;
	std::cout<<cn1*cn2 << std::endl;
	std::cout<<cn1 / cn2 << std::endl;
}
int main(void) {
	CN();
	return 0;
}
//StudybarCommentEnd

-END