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 mai n(){Complex c1(3,5),c2(2,5),c3;c1.display();coutvv"+";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;}3.有两个矩阵a 和b ,均为n 行m 列(m 、n 的值自己给出)求两个矩阵之和、差、积、商, 重载运算符“ + ”、”使之能用于矩阵向c=a*b 。
class Matrix可第习窗呂童作业如5岭-NexiTask8-3/**/#in elude viostream> #defi ne n 2 #defi ne m 3using n amespace std;//定义Matrix 类{public: Matrix();//默认构造函数 frie nd Matrix operato 叶(Matrix &M atrix &);//重载运算符“ + ”friend Matrix operator-(Matrix &,Matrix &); friend Matrixoperator*(Matrix &,Matrix &);friend Matrix operator/(Matrix &,Matrix &);void input(); // 输入数据函数void display();private: // 输出数据函数intmat[n][m]; };Matrix::Matrix(){for(inti=0;i<n;i++)for(intj=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;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();矩阵相加coutvve ndl«"Matrix c = Matrix a / Matrix b :"<<e ndl;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(inti=0;i<n;i++)for(intj=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;c=a-b;// 用重载运算符实现两个c=a*b;// 用重载运算符“实现两个cin>>b;cout<<endl<<"Matrix a:"<<endl;cout<<a;cout<<endl<<"Matrix b:"<<endl; cout<<b;矩阵相加cout<<endl<<"Matrix c = Matrix a + Matrix b :"<<endl;矩阵相加cout<<endl<<"Matrix c = Matrix a - Matrix b :"<<endl; cout<<c;矩阵相加cout<<endl<<"Matrix c = Matrix a * Matrix b :"<<endl;cout<<c;矩阵相加c=a+b;// 用重载运算符实现两个c=a/b;// 用重载运算符“实现两个cout<<endl<<"Matrix c = Matrix a / Matrix b :"<<endl; cout<<c;return 0;Task8-5/* 5.实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除运算后再化简)、求反、比较( 6 种关系)的运算*/#include<iostream>#include<stdlib.h>using namespace std;int gcd(int m,int n);class Fraction{private:int nume; // 分子int deno; // 分母public:Fraction(int nu=0,int de=1); // 构造函数,初始化用void Set(int nu=0,int de=1); // 置值,改变值时用Fraction operator+(Fraction &c2);Fraction operator-(Fraction &c2);Fraction operator*(Fraction &c2);Fraction operator/(Fraction &c2);bool operator>=(Fraction &c2);Fraction operator-();void display();void Simplify(); // 化简(使分子分母没有公因子)};Fraction::Fraction(int nu,int de){if(de!=0){nume=nu;deno=de;}else{cout<<" 格式错误 ,程序退出 \n";exit(0);}}void Fraction:: Set(int nu,int de){if(de!=0){nume=nu;deno=de;}}void Fraction::display(){cout<<nume<<'/'<<deno<<endl; }// 求分子,分母最大公约数int gcd(int m,int n){int r;if(m<n){r=m;m=n;n=r;}while(r=m%n){if(r==0)break;m=n;n=r;}return n;}// 将分数化简void Fraction::Simplify(){int n=gcd(nume,deno);nume=nume/n;deno=deno/n;cout<<nume<<'/'<<deno;}Fraction Fraction::operator+(Fraction &c2) {Fraction c;c.deno=deno*c2.deno;c.nume=nume*c2.deno+c2.nume*deno;return c;}Fraction Fraction::operator-(Fraction &c2) {Fraction c;c.deno=deno*c2.deno;c.nume=nume*c2.deno-c2.nume*deno;return c;}Fraction Fraction::operator*(Fraction &c2) {Fraction c;c.deno=deno*c2.deno;c.nume=nume*c2.nume;return c;}Fraction Fraction::operator/(Fraction &c2) {Fraction c;c.deno=deno*c2.nume;c.nume=nume*c2.deno;return c;}bool Fraction::operator>=(Fraction &c2) nume=nume*c2.nume;c2.nume=c2.nume*deno;if(nume>=c2.nume)return true;elsereturn false;}Fraction Fraction::operator-(){Fraction c;c.nume=-nume;c.deno=deno;return c;}int main(){Fraction c1(1,2),c2(5,8),c;cout<<"c1=";c1.display();cout<<"c2=";c2.display(); c=c1+c2; cout<<"c1+c2="; c.Simplify(); cout<<endl; c=c1-c2; cout<<"c1-c2="; c.Simplify(); cout<<endl; c=c1*c2; cout<<"c1*c2="; c.Simplify(); cout<<endl; c=c1/c2; cout<<"c1/c2="; c.Simplify(); cout<<endl; c=-c1; cout<<"-c1=";c.Simplify(); cout<<endl;if(c1>=c2) cout<v"c1>=c2"vvendl;system("pause");。