Task8-1/*1.定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。
将运算符函数重载为非成员、非友元的普通函数。
编写程序,求两个复数之和*/#include<iostream>using namespace std;class Complex{public:Complex(){real=0;imag=0;}Complex(double r,double i){real=r;imag=i;}void display();double real;double imag;};void Complex::display(){cout<<"("<<real<<","<<imag<<"i)";}Complex operator +(Complex &c1,Complex &c2){Complex p;p.real=c1.real+c2.real;p.imag=c1.imag+c2.imag;return p;}int main(){Complex c1(3,5),c2(2,5),c3;c1.display();cout<<"+";c2.display();cout<<"=";c3=c1+c2;c3.display();}Task8-2/*2.定义一个复数类Complex,重载运算符“+”、”-“、”*”、”/”,使之能用于复数的加、减、乘、除。
运算符重载函数作为Complex类的成员函数,编程,分别求两个复数之和差积商。
*/#include<iostream>using namespace std;class Complex{public:Complex(){real=0;imag=0;}Complex(double r,double i){real=r;imag=i;}Complex operator+(Complex &c2);Complex operator-(Complex &c2);Complex operator*(Complex &c2);Complex operator/(Complex &c2);void display();private:double real;double imag;};Complex Complex::operator +(Complex &c2){Complex c;c.real=real+c2.real;c.imag=imag+c2.imag;return c;}Complex Complex::operator -(Complex &c2){Complex c;c.real=real-c2.real;c.imag=imag-c2.imag;return c;}Complex Complex::operator *(Complex &c2){Complex c;c.real=real*c2.real;c.imag=imag*c2.imag;return c;}Complex Complex::operator /(Complex &c2){Complex c;c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag); c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag); return c;}void Complex::display(){cout<<"("<<real<<","<<imag<<"i)"<<endl;}int main(){Complex c1(3,4),c2(5,-10),c3;c3=c1+c2;cout<<"c1+c2=";c3.display();c3=c1-c2;cout<<"c1-c2=";c3.display();c3=c1*c2;cout<<"c1*c2=";c3.display();c3=c1/c2;cout<<"c1/c2=";c3.display();return 0;}Task8-3/*3.有两个矩阵a和b,均为n行m列(m、n的值自己给出),求两个矩阵之和、差、积、商,重载运算符“+”、”-“、”*”、”/”,使之能用于矩阵向加减乘除,如c=a+b、c=a*b。
*/#include <iostream>#define n 2using namespace std;class Matrix //定义Matrix类{public:Matrix(); //默认构造函数friend Matrix operator+(Matrix &,Matrix &); //重载运算符“+”friend Matrix operator-(Matrix &,Matrix &);friend Matrix operator*(Matrix &,Matrix &);friend Matrix operator/(Matrix &,Matrix &);void input(); //输入数据函数void display(); //输出数据函数private:int mat[n][m];};Matrix::Matrix() //定义构造函数{for(int i=0;i<n;i++)for(int j=0;j<m;j++)mat[i][j]=0;}Matrix operator+(Matrix &a,Matrix &b) //定义重载运算符“+”函数{Matrix c;for(int i=0;i<n;i++)for(int j=0;j<m;j++){c.mat[i][j]=a.mat[i][j]+b.mat[i][j];}return c;}Matrix operator-(Matrix &a,Matrix &b) //定义重载运算符“+”函数{Matrix c;for(int i=0;i<n;i++)for(int j=0;j<m;j++){c.mat[i][j]=a.mat[i][j]-b.mat[i][j];}return c;}Matrix operator*(Matrix &a,Matrix &b) //定义重载运算符“+”函数{Matrix c;for(int i=0;i<n;i++)for(int j=0;j<m;j++){c.mat[i][j]=a.mat[i][j]*b.mat[i][j];}return c;}Matrix operator/(Matrix &a,Matrix &b) //定义重载运算符“+”函数for(int i=0;i<n;i++)for(int j=0;j<m;j++){c.mat[i][j]=a.mat[i][j]/b.mat[i][j];}return c;}void Matrix::input() //定义输入数据函数{cout<<"input value of matrix:"<<endl;int i,j;for(i=0;i<n;i++){for(j=0;j<m;j++){cin>>mat[i][j];}}}void Matrix::display() //定义输出数据函数{for (int i=0;i<n;i++){for(int j=0;j<m;j++){cout<<mat[i][j]<<" ";}cout<<endl;}}int main(){Matrix a,b,c;a.input();b.input();cout<<endl<<"Matrix a:"<<endl;a.display();cout<<endl<<"Matrix b:"<<endl;b.display();c=a+b; //用重载运算符“+”实现两个矩阵相加cout<<endl<<"Matrix c = Matrix a + Matrix b :"<<endl;c.display();c=a-b; //用重载运算符“+”实现两个矩阵相加cout<<endl<<"Matrix c = Matrix a - Matrix b :"<<endl;c.display();c=a*b; //用重载运算符“+”实现两个矩阵相加cout<<endl<<"Matrix c = Matrix a * Matrix b :"<<endl;c.display();c=a/b; //用重载运算符“+”实现两个矩阵相加cout<<endl<<"Matrix c = Matrix a / Matrix b :"<<endl;c.display();return 0;}Task8-4/*4.在第三题的基础上,重载运算符>>和<<, 使之能用于该矩阵的输入和输出。
*/#include <iostream>#define n 2#define m 3using namespace std;class Matrix //定义Matrix类{public:Matrix(); //默认构造函数friend Matrix operator+(Matrix &,Matrix &); //重载运算符“+”friend Matrix operator-(Matrix &,Matrix &);friend Matrix operator*(Matrix &,Matrix &);friend Matrix operator/(Matrix &,Matrix &);friend ostream& operator<<(ostream& ,Matrix&);friend istream& operator>>(istream& ,Matrix&);void input(); //输入数据函数void display(); //输出数据函数private:int mat[n][m];};Matrix::Matrix() //定义构造函数{for(int i=0;i<n;i++)for(int j=0;j<m;j++)mat[i][j]=0;}Matrix operator+(Matrix &a,Matrix &b) //定义重载运算符“+”函数{Matrix c;for(int i=0;i<n;i++)for(int j=0;j<m;j++){c.mat[i][j]=a.mat[i][j]+b.mat[i][j];}return c;}Matrix operator-(Matrix &a,Matrix &b) //定义重载运算符“+”函数{Matrix c;for(int i=0;i<n;i++)for(int j=0;j<m;j++){c.mat[i][j]=a.mat[i][j]-b.mat[i][j];}return c;}Matrix operator*(Matrix &a,Matrix &b) //定义重载运算符“+”函数{Matrix c;for(int i=0;i<n;i++)for(int j=0;j<m;j++){c.mat[i][j]=a.mat[i][j]*b.mat[i][j];}return c;}Matrix operator/(Matrix &a,Matrix &b) //定义重载运算符“+”函数{Matrix c;for(int i=0;i<n;i++)for(int j=0;j<m;j++){c.mat[i][j]=a.mat[i][j]/b.mat[i][j];}return c;}ostream& operator<<(ostream& out,Matrix& c){for(int i=0;i<n;i++){for(int j=0;j<m;j++)cout<<c.mat[i][j]<<'\t';cout<<endl;}return out;}istream& operator>>(istream& in,Matrix& c){for(int i=0;i<n;i++){for(int j=0;j<m;j++)cin>>c.mat[i][j];cout<<endl;}return in;}void Matrix::input() //定义输入数据函数{cout<<"input value of matrix:"<<endl;int i,j;for(i=0;i<n;i++){for(j=0;j<m;j++){cin>>mat[i][j];}}}void Matrix::display() //定义输出数据函数{for (int i=0;i<n;i++){for(int j=0;j<m;j++){cout<<mat[i][j]<<" ";}cout<<endl;}}int main(){Matrix a,b,c;cout<<"请输入第一个n*m矩阵"<<endl;cin>>a;cout<<"请输入第二个n*m矩阵"<<endl;cin>>b;cout<<endl<<"Matrix a:"<<endl;cout<<a;cout<<endl<<"Matrix b:"<<endl;cout<<b;c=a+b; //用重载运算符“+”实现两个矩阵相加cout<<endl<<"Matrix c = Matrix a + Matrix b :"<<endl;c=a-b; //用重载运算符“+”实现两个矩阵相加cout<<endl<<"Matrix c = Matrix a - Matrix b :"<<endl;cout<<c;c=a*b; //用重载运算符“+”实现两个矩阵相加cout<<endl<<"Matrix c = Matrix a * Matrix b :"<<endl;cout<<c;c=a/b; //用重载运算符“+”实现两个矩阵相加cout<<endl<<"Matrix c = Matrix a / Matrix b :"<<endl;cout<<c;return 0;}Task8-5/*5.实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算。