c++运算符重载习题.docx

上传人:wj 文档编号:2018245 上传时间:2023-05-02 格式:DOCX 页数:14 大小:56.77KB
下载 相关 举报
c++运算符重载习题.docx_第1页
第1页 / 共14页
c++运算符重载习题.docx_第2页
第2页 / 共14页
c++运算符重载习题.docx_第3页
第3页 / 共14页
c++运算符重载习题.docx_第4页
第4页 / 共14页
c++运算符重载习题.docx_第5页
第5页 / 共14页
c++运算符重载习题.docx_第6页
第6页 / 共14页
c++运算符重载习题.docx_第7页
第7页 / 共14页
c++运算符重载习题.docx_第8页
第8页 / 共14页
c++运算符重载习题.docx_第9页
第9页 / 共14页
c++运算符重载习题.docx_第10页
第10页 / 共14页
c++运算符重载习题.docx_第11页
第11页 / 共14页
c++运算符重载习题.docx_第12页
第12页 / 共14页
c++运算符重载习题.docx_第13页
第13页 / 共14页
c++运算符重载习题.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

c++运算符重载习题.docx

《c++运算符重载习题.docx》由会员分享,可在线阅读,更多相关《c++运算符重载习题.docx(14页珍藏版)》请在冰点文库上搜索。

c++运算符重载习题.docx

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;i

for(intj=0;j

mat[i][j]=0;

}

Matrixoperator+(Matrix&a,Matrix&b)//定义重载运算符“+”函数

{Matrixc;

for(inti=0;i

for(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;i

for(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;i

for(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;i

for(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&,Matrix&);//重载运算符“+”

friendMatrixoperator-(Matrix&,Matrix&);

friendMatrixoperator*(Matrix&,Matrix&);

friendMatrixoperator/(Matrix&,Matrix&);

friendostream&operator<<(ostream&,Matrix&);

friendistream&operator>>(istream&,Matrix&);

voidinput();//输入数据函数

voiddisplay();//输出数据函数

private:

intmat[n][m];

};

Matrix:

:

Matrix()//定义构造函数

{for(inti=0;i

for(intj=0;j

mat[i][j]=0;

}

Matrixoperator+(Matrix&a,Matrix&b)//定义重载运算符“+”函数

{Matrixc;

for(inti=0;i

for(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;i

for(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;i

for(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;i

for(intj=0;j

{c.mat[i][j]=a.mat[i][j]/b.mat[i][j];}

returnc;

}

ostream&operator<<(ostream&out,Matrix&c)

{

for(inti=0;i

{

for(intj=0;j

cout<

cout<

}

returnout;

}

istream&operator>>(istream&in,Matrix&c)

{

for(inti=0;i

{

for(intj=0;j

cin>>c.mat[i][j];

cout<

}

returnin;

}

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;

cout<<"请输入第一个n*m矩阵"<

cin>>a;

cout<<"请输入第二个n*m矩阵"<

cin>>b;

cout<

"<

cout<

cout<

"<

cout<

c=a+b;//用重载运算符“+”实现两个矩阵相加

cout<

"<

c=a-b;//用重载运算符“+”实现两个矩阵相加

cout<

"<

cout<

c=a*b;//用重载运算符“+”实现两个矩阵相加

cout<

"<

cout<

c=a/b;//用重载运算符“+”实现两个矩阵相加

cout<

"<

cout<

return0;

}

Task8-5

/*

5. 实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除

(运算后再化简)、求反、比较(6种关系)的运算。

*/

#include

#include

usingnamespacestd;

intgcd(intm,intn);

classFraction

{

private:

intnume;//分子

intdeno;//分母

public:

Fraction(intnu=0,intde=1);//构造函数,初始化用

voidSet(intnu=0,intde=1);//置值,改变值时用

Fractionoperator+(Fraction&c2);

Fractionoperator-(Fraction&c2);

Fractionoperator*(Fraction&c2);

Fractionoperator/(Fraction&c2);

booloperator>=(Fraction&c2);

Fractionoperator-();

voiddisplay();

voidSimplify();//化简(使分子分母没有公因子)

};

Fraction:

:

Fraction(intnu,intde)

{

if(de!

=0)

{

nume=nu;

deno=de;

}

else

{

cout<<"格式错误,程序退出\n";

exit(0);

}

}

voidFraction:

:

Set(intnu,intde)

{

if(de!

=0)

{

nume=nu;

deno=de;

}

}

voidFraction:

:

display()

{

cout<

}

//求分子,分母最大公约数

intgcd(intm,intn)

{

intr;

if(m

{

r=m;

m=n;

n=r;

}

while(r=m%n)

{

if(r==0)

break;

m=n;

n=r;

}

returnn;

}

//将分数化简

voidFraction:

:

Simplify()

{

intn=gcd(nume,deno);

nume=nume/n;

deno=deno/n;

cout<

}

FractionFraction:

:

operator+(Fraction&c2)

{

Fractionc;

c.deno=deno*c2.deno;

c.nume=nume*c2.deno+c2.nume*deno;

returnc;

}

FractionFraction:

:

operator-(Fraction&c2)

{

Fractionc;

c.deno=deno*c2.deno;

c.nume=nume*c2.deno-c2.nume*deno;

returnc;

}

FractionFraction:

:

operator*(Fraction&c2)

{

Fractionc;

c.deno=deno*c2.deno;

c.nume=nume*c2.nume;

returnc;

}

FractionFraction:

:

operator/(Fraction&c2)

{

Fractionc;

c.deno=deno*c2.nume;

c.nume=nume*c2.deno;

returnc;

}

boolFraction:

:

operator>=(Fraction&c2)

{

nume=nume*c2.nume;

c2.nume=c2.nume*deno;

if(nume>=c2.nume)

returntrue;

else

returnfalse;

}

FractionFraction:

:

operator-()

{

Fractionc;

c.nume=-nume;

c.deno=deno;

returnc;

}

intmain()

{

Fractionc1(1,2),c2(5,8),c;

cout<<"c1=";

c1.display();

cout<<"c2=";

c2.display();

c=c1+c2;

cout<<"

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2