第9周任务1(Complex类中的<<和>>运算符重载实现时间的输入和输出)
来源:互联网 发布:json格式数据 编辑:程序博客网 时间:2024/06/06 02:51
/* (程序头部注释开始)* 程序的版权和版本声明部分* Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved.* 文件名称: * 作 者: 臧鹏 * 完成日期: 2012 年 4 月 15 日* 版 本 号: * 对任务及求解方法的描述部分* 输入描述:* 问题描述:在第8周任务1的基础上,定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中队运算结果的显示方式,使程序更自然。* 程序输出: * 程序头部的注释结束*/#include<iostream> using namespace std; class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} friend Complex operator+(Complex &c1,Complex &c2); friend Complex operator-(Complex &c1,Complex &c2); friend Complex operator*(Complex &c1,Complex &c2); friend Complex operator/(Complex &c1,Complex &c2); friend Complex operator+(Complex &c1,const double &d); friend Complex operator-(Complex &c1,const double &d); friend Complex operator*(Complex &c1,const double &d); friend Complex operator/(Complex &c1,const double &d); friend Complex operator+(const double &d,Complex &c1); friend Complex operator-(const double &d,Complex &c1); friend Complex operator*(const double &d,Complex &c1); friend Complex operator/(const double &d,Complex &c1); friend Complex operator-(Complex &c);//一目运算符 //void display();friend ostream & operator << (ostream&, Complex&);//<<重载 friend istream & operator >> (istream&, Complex&); //>>重载private: double real; double imag; }; //下面定义成员函数 Complex operator+(Complex &c1,Complex &c2)//复数加法 { Complex c; c.real = c1.real +c2.real; c.imag = c1.imag +c2.imag; return c; } Complex operator+(Complex &c1,const double &d)//复数加double { Complex c; c.real = c1.real +d; c.imag = c1.imag ; return c; } Complex operator+(const double &d,Complex &c1)//double加复数 { Complex c; c.real = c1.real +d; c.imag = c1.imag ; return c; } Complex operator-(Complex &c1,Complex &c2) //复数减法 { Complex c; c.real = c1.real -c2.real; c.imag = c1.imag -c2.imag; return c; } Complex operator-(Complex &c1,const double &d)//复数减double { Complex c; c.real = c1.real -d; c.imag = c1.imag ; return c; } Complex operator-(const double &d,Complex &c1)//double减复数 { Complex c; c.real =d- c1.real ; c.imag = -c1.imag ; return c; } Complex operator*(Complex &c1,Complex &c2) //复数乘法 { Complex c; c.real=c1.real*c2.real-c1.imag*c2.imag; c.imag=c1.imag*c2.real+c1.real*c2.imag; return c; } Complex operator*(Complex &c1,const double &d)//复数乘double { Complex c; c.real=c1.real*d-c1.imag*0; c.imag=c1.imag*d+c1.real*0; return c; } Complex operator*(const double &d,Complex &c1)//double乘复数 { Complex c; c.real=c1.real*d-c1.imag*0; c.imag=c1.imag*d+c1.real*0; return c; } Complex operator/(Complex &c1,Complex &c2)//复数除法 { Complex c; c.real=(c1.real*c2.real+c2.imag*c1.imag)/(c2.real*c2.real+c2.imag*c2.imag); c.imag=(c2.real*c1.imag-c2.imag*c1.real)/(c2.real*c2.real+c2.imag*c2.imag); return c; } Complex operator/(Complex &c1,const double &d)//复数除double { Complex c; c.real=(c1.real*d+0*c1.imag)/(d*d); c.imag=(d*c1.imag-0*c1.real)/(d*d); return c; } Complex operator/(const double &d,Complex &c1)//double除复数 { Complex c; c.real=(c1.real*d+0*c1.imag)/(c1.real*c1.real+c1.imag*c1.imag); c.imag=(0*c1.real-d*c1.imag)/(c1.real*c1.real+c1.imag*c1.imag); return c; } /*void Complex::display() { cout<<"("<<real<<","<<imag<<"i)"<<endl; cout<<endl; } */Complex operator-(Complex &c1) { Complex c; c.real = -c1.real; c.imag = -c1.imag; return c; }istream & operator >> (istream&in, Complex&c)//<<重载 { char a; cout<< "请输入复数:(格式:x:x)" << endl; while(1) { cin >> c.real >> a >> c.imag ; if(a !=':') {//cin >> c.real >> a >> c.imag ;cout << "输入格式不正确,重新输入:";continue;} else break;} return cin; }ostream & operator << (ostream&out, Complex&c) //>>重载{ cout << c.real; if(c.imag >= 0) { cout << "+"; } cout << c.imag << "i" << endl; return cout; } int main() { Complex c1,c2,c3;cout<<"请输入c1";cin>>c1;cout<<"请输入c2";cin>>c2;cout<<"c1 ="<<c1;cout<<"c2 ="<<c2;c3=c1+c2; cout<<"c1+c2="; cout<<c3; c3=c1-c2; cout<<"c1-c2="; cout<<c3; c3=c1*c2; cout<<"c1*c2="; cout<<c3;c3=c1/c2; cout<<"c1/c2="; cout<<c3;c3=c1+6.38; cout<<"c1+6.38="; cout<<c3;c3=c1-6.38; cout<<"c1-6.38="; cout<<c3;c3=c1*6.38; cout<<"c1*6.38="; cout<<c3;c3=c1/6.38; cout<<"c1/6.38="; cout<<c3; c3=6.38+c1; cout<<"6.38+c1="; cout<<c3; c3=6.38-c1; cout<<"6.38-c1="; cout<<c3; c3=6.38*c1; cout<<"6.38*c1="; cout<<c3;c3=6.38/c1; cout<<"6.38/c1="; cout<<c3; c3 = -c2; cout<<"-c2="; cout<<c3;system("pause"); return 0; }