c++运算符重载习题
- 格式:docx
- 大小:30.27 KB
- 文档页数:29
1.概念填空题1.1运算符重载是对已有的运算符赋予多重含义,使同一个运算符在作用于不同类型对象时导致不同的行为。
运算符重载的实质是函数重载,是类的多态性特征。
1.2可以定义一种特殊的类型转换函数,将类的对象转换成基本数据类型的数据。
但是这种类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数。
类类型转换函数既没有参数,也不显式给出返回类型。
类类型函数中必须有return 表达式的语句返回函数值。
一个类可以定义多个类类型转换函数。
1.3运算符重载时其函数名由operator运算符构成。
成员函数重载双目运算符时,左操作数是对象,右操作数是函数参数。
2.简答题2.2简述运算符重载的规则。
2.2简述重载单目运算符++、--,前置和后置时的差别。
2.3 C++中重运算符是否都可以重载?是否都可以重载成类的成员函数?是否都可以重载成类的友元函数?2.4 构造函数作为类型转换函数的条件是什么。
3.选择题3.1在下列运算符中,不能重载的是(B)A.!B. sizeofC. newD. delete3.2 不能用友员函数重载的是(A)。
A.=B.==C.<=D.++3.3下列函数中,不能重载运算符的函数是(B)。
A.成员函数B.构造函数C.普通函数D.友员函数3.4如果表达式++i*k时中的”++”和”*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为(B)。
A.operator*(i.operator++(),k) B.operator*(operator++(i),k)C.i.operator++().operator*(k) D.k.operator*(operator++(i))3.5已知在一个类体中包含如下函数原型:VOLUME operator-(VOLUME)const;下列关于这个函数的叙述中,错误的是(B )。
A.这是运算符-的重载运算符函数B.这个函数所重载的运算符是一个一元运算符C.这是一个成员函数D.这个函数不改变数据成员的值3.6在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。
01.分析以下程序执行结果#include<>int add(int x,int y){return x+y;}double add(double x,double y){return x+y;}void main(){int a=4,b=6;double c=,d=;cout<<add(a,b)<<","<<add(c,d)<<endl;}解:本题说明函数重载的使用方法,这里有两个add()函数,一个add()函数的参数与返回值为int型,另一个的参数与返回值为double型,它们是根据参数类型自动区分的。
所以输出为: 10,10-----------------------------------------------02.分析以下程序的执行结果#include<>class Sample{int i;double d;public:void setdata(int n){i=n;}void setdata(double x){d=x;}void disp(){cout<<"i="<<i<<",d="<<d<<endl;}};void main(){Sample s;(10);;();}解:本题说明重载成员函数的使用方法。
setdata()成员函数有两个,根据其参数类型加以区分。
所以输出为:i=10, d=-----------------------------------------------03.分析以下程序的执行结果#include<>class Sample{int n;public:Sample(){}Sample(int i){n=i;}Sample &operator =(Sample);void disp(){cout<<"n="<<n<<endl;}};Sample &Sample::operator=(Sample s){Sample::n=;return *this;}void main(){Sample s1(10),s2;s2=s1;();}解:本题说明重载运算符(=)的使用方法。
第10章运算符重载一、选择题1.A2.D3.A4.B5.D6.C二、写出下列程序运行结果(略)三、简答题1.(1)只能重载已有的C++运算符,不可自创新的运算符。
(2)重载后运算符的优先级和结合性都不变。
(3)重载的功能应当与原有功能相类似。
2.: : . .* ? : sizeof typeid 3.&& | | ,四、编程题1.#include<iostream>class MyString{public:MyString(){strLength=0;pStr=new char[1];*pStr='\0';}MyString(const char*pString){strLength=strlen(pString);pStr=new char[strLength+1];strcpy(pStr,pString);}MyString(char ch,int n){strLength=n;pStr=new char[strLength+1];for(unsigned int i=0;i<strLength;*(pStr+i++)=ch);*(pStr+strLength)='\0';}MyString(int number){char buffer[20];int temp=number;if(number<0)number=-number;int len=0;do{buffer[len++]=static_cast<char>('0'+number%10 );number/=10;}while(number>0);if(temp<0)buffer[len++]='-';buffer[len]='\0';strLength=len;pStr=new char[strLength+1];strcpy(pStr,buffer);char ch=0;for(int i=0,j=len-1;i<j;i++,j--){ch=pStr[i];pStr[i]=pStr[j];pStr[j]=ch;}}MyString(const MyString&rString){strLength=rString.strLength;pStr=new char[strLength+1];strcpy(pStr,rString.pStr);}~MyString(){delete[]pStr;}MyString& operator+(const MyString&rStr)const {return MyString(*this)+=rStr;}};2.#include<iostream>class MyString{public:MyString(){strLength=0;pStr=new char[1];*pStr='\0';}MyString(const char*pString){strLength=strlen(pString);pStr=new char[strLength+1];strcpy(pStr,pString);}MyString(char ch,int n){strLength=n;pStr=new char[strLength+1];for(unsigned int i=0;i<strLength;*(pStr+i++)=ch);*(pStr+strLength)='\0';}MyString(int number){char buffer[20];int temp=number;if(number<0)number=-number;int len=0;do{buffer[len++]=static_cast<char>('0'+number%10 );number/=10;}while(number>0);if(temp<0)buffer[len++]='-';buffer[len]='\0';strLength=len;pStr=new char[strLength+1];strcpy(pStr,buffer);char ch=0;for(int i=0,j=len-1;i<j;i++,j--){ch=pStr[i];pStr[i]=pStr[j];pStr[j]=ch;}}MyString(const MyString&rString){strLength=rString.strLength;pStr=new char[strLength+1];strcpy(pStr,rString.pStr);}~MyString(){delete[]pStr;}MyString& Operator=(const MyString&rStr)const{if(this == &rStr)return *this;delete []str;str = new char[strlen(rStr.str )+1];strcpy(str, rStr.str);return *this;}};。
第三章重载1、请完成下列填空题1)在C++中,只能重载为类的成员函数的运算符是_=_、__[]__、__()__、__->__。
2)利用成员函数对二元运算符重载,其左操作数为___This___,右操作数为___成员函数参数___。
3)单目运算符作为类成员函数重载时___没有___的参数;双目运算符作为___类成员函数___重载时需声明其右操作数,作为___友元函数___重载时需声明全部操作数。
4)设a和b是两个整型变量,a+b表示这两个变量的和:设c和d为浮点型变量,c+d也表示这两个变量的和。
这里的运算符+具有不同的用途,这是__运算符重载___的例子。
5)重载的运算符仍然保持其原来的优先级、___结合性___和___语法结构___。
6)C++中不能重载的运算符有、__*___、___::___、___?:___和___sizof___。
2、编程题1)字符串连接需要两个操作数,即两个要被连接的字符串。
请按照以平方式实现operator +操作:string1=string2+string3答案:#include <>#include <>class String{public:String(int size=80){length=size;buf=new char[length+1];*buf='\0';}String(char *s){length=strlen(s);buf=new char[length+1];strcpy(buf,s);}String(const String& str){length=strlen;buf=new char[length+1];strcpy(buf,;}~String(){delete[]buf;}String& operator =(const String& str){length=;strcpy(buf,;return *this;}void Print(){cout<<buf<<endl;}friend String operator +(const String& str1,const String& str2){String temp(strlen+strlen+1);strcpy,;strcat,;return temp;}private:char *buf;int length;};void main(){String str1,str2("Hello,"),str3("everyone!");str1=str2+str3;();}2)给th类:class Three-d{public:Three_d(int I,int j,int k){x=I;y=j;z=k;}.Three_d()){x=0;y=0;z=0;}V oid Get(int &I,int &j,int &k({I=x;j=y;k=z;}private:int x,y,z;};针对给出的类,重载"+"、"++"与"一"运算符(只重载前缀方式即可)。
国家二级C++机试(运算符重载、模板和C++流)模拟试卷6(总分:58.00,做题时间:90分钟)一、选择题(总题数:29,分数:58.00)1.若在表达式y/x中,''/''是作为成员函数重载的运算符,则该表达式还可以表示为( )。
(分数:2.00)A.x.operator/(y)B.operator/(x,y)C.y.operator/(x) √D.operator/(y,x)解析:解析:运算符函数的函数名是由运算符前加关键字operator构成的。
所以当“/”作为运算符重载后,其格式为operator/。
所以其作为成员函数调用时的格式为y.operator/(x)。
2.有类定义如下: class Type{ public: Type(int i=0); Type operator-(int); friend Type operator+(Type,Type); private: int val; };若有对象定义Type c1;则下列语句序列中,错误的是( )。
(分数:2.00)A.Type(3)+c1;B.e1+Type(3);C.3-c1:√D.c1-3;解析:解析:由于在类Type中对“-”进行了重载,所以根据“-”重载的形式定义,c1-3是正确的,而3-c1是错误的表达式。
3.若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。
(分数:2.00)A.Data+(Data);B.Data operator+{Data};√C.Data+operator{Data};D.operator+(Data,Data);解析:解析:“+”是一个二元运算符,因此作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数是对象本身。
运算符函数的函数名是由运算符前加关键字operator构成的。
4.若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是( )。
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。
国家二级C++机试(运算符重载、模板和C++流)模拟试卷6(题后含答案及解析)题型有:1. 选择题选择题1.若在表达式y/x中,’’/’’是作为成员函数重载的运算符,则该表达式还可以表示为( )。
A.x.operator/(y)B.operator/(x,y)C.y.operator/(x)D.operator/(y,x)正确答案:C解析:运算符函数的函数名是由运算符前加关键字operator构成的。
所以当“/”作为运算符重载后,其格式为operator/。
所以其作为成员函数调用时的格式为y.operator/(x)。
知识模块:运算符重载2.有类定义如下:class Type{ public:Type(int i=0);Type operator-(int);friend Type operator+(Type,Type);private:int val;};若有对象定义Type c1;则下列语句序列中,错误的是( )。
A.Type(3)+c1;B.e1+Type(3);C.3-c1:D.c1-3;正确答案:C解析:由于在类Type中对“-”进行了重载,所以根据“-”重载的形式定义,c1-3是正确的,而3-c1是错误的表达式。
知识模块:运算符重载3.若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。
A.Data+(Data);B.Data operator+{Data};C.Data+operator{Data};D.operator+(Data,Data);正确答案:B解析:“+”是一个二元运算符,因此作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数是对象本身。
运算符函数的函数名是由运算符前加关键字operator构成的。
知识模块:运算符重载4.若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是( )。
A.operator long( )const;B.operator long(bigNumber);C.long operator long( )const;D.long operator long(BjgNumber);正确答案:A解析:在重载类型转换符时,由于运算符本身已经表示出返回值类型,因此不需要返回值类型的声明。
1.概念填空题1.1运算符重载是对已有的运算符赋予多重含义,使同一个运算符在作用于不同类型对象时导致不同的行为。
运算符重载的实质是函数重载,是类的多态性特征。
1.2可以定义一种特殊的类型转换函数,将类的对象转换成基本数据类型的数据。
但是这种类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数。
类类型转换函数既没有参数,也不显式给出返回类型。
类类型函数中必须有return 表达式的语句返回函数值。
一个类可以定义多个类类型转换函数。
1.3运算符重载时其函数名由operator运算符构成。
成员函数重载双目运算符时,左操作数是对象,右操作数是函数参数。
2.简答题运算符重载的规则。
2.2简述重载单目运算符++、--,前置和后置时的差别。
2.3 C++中重运算符是否都可以重载?是否都可以重载成类的成员函数?是否都可以重载成类的友元函数?2.4 构造函数作为类型转换函数的条件是什么。
3.选择题3.1在下列运算符中,不能重载的是(B)A.!B. sizeofC. newD. delete3.2 不能用友员函数重载的是(A)。
A.=B.==C.<=D.++3.3下列函数中,不能重载运算符的函数是(B)。
A.成员函数B.构造函数C.普通函数D.友员函数3.4如果表达式++i*k时中的”++”和”*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为(B)。
A.operator*(i.operator++(),k) B.operator*(operator++(i),k)C.i.operator++().operator*(k) D.k.operator*(operator++(i))3.5已知在一个类体中包含如下函数原型:VOLUME operator-(VOLUME)const;下列关于这个函数的叙述中,错误的是(B )。
A.这是运算符-的重载运算符函数B.这个函数所重载的运算符是一个一元运算符C.这是一个成员函数D.这个函数不改变数据成员的值3.6在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。
运算符重载一.单项选择题1.下列运算符中,运算符在C++中不能重载。
A.?:B.+C.D.<=解:C++中不能被重载的运算符有:·,一,::,?:。
本题答案为A。
2.下列运算符中,运算符在C++中不能重载。
A.&&B.[]C.::D.new解:c++中不能被重载的运算符有:·,·+,::,?:。
本题答案为c。
3.下列关于运算符重载的描述中,是正确的。
A.运算符重载可以改变操作数的个数B.运算符重载可以改变优先级C.运算符重载可以改变结合性D.运算符重载不可以改变语法结构解:运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算程的语法结构。
本题答案为D。
4.友元运算符objl>obj2被C++编译器解释为。
A.operator>(objl,obj2) B.>(obj1,obj2)C.obj2.operator:>(obj1) D.objl.operator>(obj2)解:重载为友元函数的运算符的调用形式如下:operator<运算符>(<参数,<参数2>)等价于:<参数1><运算符><参数2>本题答案为A。
5.现需要对list类对象使用的逻辑运算符“==”重载,以下函数声明是正确的。
A、list&list::operator==(const list&a) ;B、list list::operator==(const list&a) ;C、bool&list::operator==(const list&a);D、bool list::operator==(const list&a);6.以下类中分别说明了“+=”和“++”运算符重载函数的原型。
如果主函数中有定义:fun m,c,d;,那么,执行语句c=m++;时,编译器把m++解释为:(3)A)c.o p e r a t o r++(m);B)m=o p e r a t o r++(m);C)m.o p e r a t o r++(m);D)o p e r a t o r++(m);class fun{public:....f u n o p e r a t o r+=(f u n);f r i e n d f u n o p e r a t o r++(f u n&,i n t);};答案:D7.在第33题中,当执行语句d+=m;时,C++编译器对语句作如下解释:(34)A.d=operator+=(m);B.m=operator+=(d);C. d.operator+=(m);D.m.operator+=(d);答案:C8.设有以下类定义,其中说明了“+”运算符重载函数的原型。
实验七-运算符重载参考答案实验七多态性—函数与运算符重载7.1 实验目的1.理解掌握成员函数方式运算符重载;2.理解掌握友元函数方式运算符重载;3.理解掌握++、--运算符的重载。
7.2 实验内容7.2.1程序阅读1.理解下面的程序,并运行查看结果,回答程序后面的问题。
#include <iostream>using namespace std;class CComplex{public:CComplex(){real = 0;imag = 0;}CComplex(int x,int y){real = x;imag = y;}int real;int imag;CComplex operator + (CComplex obj1)//---------------------------------------------①{CComplex obj2(real - obj1.real, imag - obj1.imag);return obj2;}};int main(){CComplex obj1(100,30);CComplex obj2(20, 30);CComplex obj;obj = obj1+obj2; //------------------------------------------------------------------②cout << obj.real <<endl;cout << obj.imag << endl;return 0;}问题一:①处的运算符重载,为什么该函数的返回值要设计成CComplex类型?答:因为在函数中return obj2,obj2是CComplex 类型,所以函数返回值要与return返回的类型相同,即设计成CComplex类型。
问题二:②处的运算符重载函数调用就相当于“obj=operator+(obj1,obj2);”,但是为什么CComplex类中的运算符重载函数只设计了一个参数?答:因为成员函数经编译后会产生this指针,this指针会指向调用该函数的obj1对象,该obj1对象就是就相当于函数的第一个参数。
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");。