c++运算符重载习题.docx
《c++运算符重载习题.docx》由会员分享,可在线阅读,更多相关《c++运算符重载习题.docx(14页珍藏版)》请在冰豆网上搜索。
Task8-1
/*
1. 定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。
将运算符函数重载为非成员、非友元的普通函数。
编写程序,求两个复数之和
*/
#include
usingnamespacestd;
classComplex
{
public:
Complex(){real=0;imag=0;}
Complex(doubler,doublei){real=r;imag=i;}
voiddisplay();
doublereal;
doubleimag;
};
voidComplex:
:
display()
{
cout<<"("<}
Complexoperator+(Complex&c1,Complex&c2)
{
Complexp;
p.real=c1.real+c2.real;
p.imag=c1.imag+c2.imag;
returnp;
}
intmain()
{
Complexc1(3,5),c2(2,5),c3;
c1.display();
cout<<"+";
c2.display();
cout<<"=";
c3=c1+c2;
c3.display();
}
Task8-2
/*2. 定义一个复数类Complex,重载运算符“+”、”-“、”*”、”/”,
使之能用于复数的加、减、乘、除。
运算符重载函数作为Complex类的成员函数,
编程,分别求两个复数之和差积商。
*/
#include
usingnamespacestd;
classComplex
{public:
Complex(){real=0;imag=0;}
Complex(doubler,doublei){real=r;imag=i;}
Complexoperator+(Complex&c2);
Complexoperator-(Complex&c2);
Complexoperator*(Complex&c2);
Complexoperator/(Complex&c2);
voiddisplay();
private:
doublereal;
doubleimag;
};
ComplexComplex:
:
operator+(Complex&c2)
{Complexc;
c.real=real+c2.real;
c.imag=imag+c2.imag;
returnc;
}
ComplexComplex:
:
operator-(Complex&c2)
{Complexc;
c.real=real-c2.real;
c.imag=imag-c2.imag;
returnc;
}
ComplexComplex:
:
operator*(Complex&c2)
{Complexc;
c.real=real*c2.real;
c.imag=imag*c2.imag;
returnc;
}
ComplexComplex:
:
operator/(Complex&c2)
{Complexc;
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);
returnc;
}
voidComplex:
:
display()
{cout<<"("<}
intmain()
{Complexc1(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();
return0;
}
Task8-3
/*
3. 有两个矩阵a和b,均为n行m列(m、n的值自己给出),
求两个矩阵之和、差、积、商,重载运算符“+”、”-“、”*”、”/”,
使之能用于矩阵向加减乘除,如c=a+b、c=a*b。
*/
#include
#definen2
#definem3
usingnamespacestd;
classMatrix//定义Matrix类
{public:
Matrix();//默认构造函数
friendMatrixoperator+(Matrix&,Matrix&);//重载运算符“+”
friendMatrixoperator-(Matrix&,Matrix&);
friendMatrixoperator*(Matrix&,Matrix&);
friendMatrixoperator/(Matrix&,Matrix&);
voidinput();//输入数据函数
voiddisplay();//输出数据函数
private:
intmat[n][m];
};
Matrix:
:
Matrix()//定义构造函数
{for(inti=0;ifor(intj=0;jmat[i][j]=0;
}
Matrixoperator+(Matrix&a,Matrix&b)//定义重载运算符“+”函数
{Matrixc;
for(inti=0;ifor(intj=0;j{c.mat[i][j]=a.mat[i][j]+b.mat[i][j];}
returnc;
}
Matrixoperator-(Matrix&a,Matrix&b)//定义重载运算符“+”函数
{Matrixc;
for(inti=0;ifor(intj=0;j{c.mat[i][j]=a.mat[i][j]-b.mat[i][j];}
returnc;
}
Matrixoperator*(Matrix&a,Matrix&b)//定义重载运算符“+”函数
{Matrixc;
for(inti=0;ifor(intj=0;j{c.mat[i][j]=a.mat[i][j]*b.mat[i][j];}
returnc;
}
Matrixoperator/(Matrix&a,Matrix&b)//定义重载运算符“+”函数
{Matrixc;
for(inti=0;ifor(intj=0;j{c.mat[i][j]=a.mat[i][j]/b.mat[i][j];}
returnc;
}
voidMatrix:
:
input()//定义输入数据函数
{cout<<"inputvalueofmatrix:
"<inti,j;
for(i=0;i{
for(j=0;j{
cin>>mat[i][j];
}
}
}
voidMatrix:
:
display()//定义输出数据函数
{for(inti=0;i{for(intj=0;j{cout<cout<}
intmain()
{
Matrixa,b,c;
a.input();
b.input();
cout<"<a.display();
cout<"<b.display();
c=a+b;//用重载运算符“+”实现两个矩阵相加
cout<"<c.display();
c=a-b;//用重载运算符“+”实现两个矩阵相加
cout<"<c.display();
c=a*b;//用重载运算符“+”实现两个矩阵相加
cout<"<c.display();
c=a/b;//用重载运算符“+”实现两个矩阵相加
cout<"<c.display();
return0;
}
Task8-4
/*
4. 在第三题的基础上,重载运算符>>和<<,使之能用于该矩阵的输入和输出。
*/
#include
#definen2
#definem3
usingnamespacestd;
classMatrix//定义Matrix类
{public:
Matrix();//默认构造函数
friendMatrixoperator+(Matrix&,Mat