实验七运算符重载参考答案Word文档下载推荐.docx

上传人:b****4 文档编号:18485764 上传时间:2022-12-17 格式:DOCX 页数:10 大小:16.46KB
下载 相关 举报
实验七运算符重载参考答案Word文档下载推荐.docx_第1页
第1页 / 共10页
实验七运算符重载参考答案Word文档下载推荐.docx_第2页
第2页 / 共10页
实验七运算符重载参考答案Word文档下载推荐.docx_第3页
第3页 / 共10页
实验七运算符重载参考答案Word文档下载推荐.docx_第4页
第4页 / 共10页
实验七运算符重载参考答案Word文档下载推荐.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

实验七运算符重载参考答案Word文档下载推荐.docx

《实验七运算符重载参考答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《实验七运算符重载参考答案Word文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。

实验七运算符重载参考答案Word文档下载推荐.docx

{

real=0;

imag=0;

}

CComplex(intx,inty)

real=x;

imag=y;

intreal;

intimag;

CComplexoperator+(CComplexobj1)//---------------------------------------------①

CComplexobj2(real-obj1.real,imag-obj1.imag);

returnobj2;

};

intmain()

CComplexobj1(100,30);

CComplexobj2(20,30);

CComplexobj;

obj=obj1+obj2;

//------------------------------------------------------------------②

cout<

<

obj.real<

endl;

obj.imag<

endl;

return0;

}

问题一:

①处的运算符重载,为什么该函数的返回值要设计成CComplex类型?

答:

因为在函数中returnobj2,obj2是CComplex类型,所以函数返回值要与return返回的类型相同,即设计成CComplex类型。

问题二:

②处的运算符重载函数调用就相当于“obj=operator+(obj1,obj2);

”,但是为什么CComplex类中的运算符重载函数只设计了一个参数?

因为成员函数经编译后会产生this指针,this指针会指向调用该函数的obj1对象,该obj1对象就是就相当于函数的第一个参数。

因此可以在函数参数列表中只设计一个参数。

问题三:

上述程序设计合理吗?

为什么?

不合理,因为它所实现的功能是obj2-obj1,而重载运算符的名字为“+”,这使用起来非常不直观,会让人以为这实现的功能是obj1+obj2。

2.理解下面的程序,并运行查看结果,回答程序后面的问题。

real=0.0;

imag=0.0;

CComplex(floatx,floaty)

CComplexoperator+(CComplex&

obj1,CComplex&

obj2)

CComplexobj3(obj1.real+obj2.real,obj1.imag+obj2.imag);

returnobj3;

CComplex&

operator++(CComplex&

obj)//重载前置自增运算符

++obj.real;

++obj.imag;

returnobj;

voidprint()

cout<

real<

"

+"

imag<

i"

private:

floatreal;

floatimag;

CComplex&

operator--(CComplex&

x)//重载前置自减运算符

--x.real;

--x.imag;

returnx;

CComplexobj1(2.1,3.2);

CComplexobj2(3.6,2.5);

cout<

obj1="

;

obj1.print();

obj2="

obj2.print();

CComplexobj3=obj1+obj2;

before++,obj3="

obj3.print();

++obj3;

after++,obj3="

--obj3;

after--,obj3="

CComplexobj4=++obj3;

obj4="

obj4.print();

以上程序中的三个运算符重载都有错误,试改正过来,使程序输出正确结果。

1.两个复数相加

●修改方案一:

将CComplexoperator+(CComplex&

obj2);

定义为友元函数在类体外写。

●修改方案二:

的形参改为一个,写在类体中,哪个对象调用,即对其与另一个对象进行运算符操作。

2.前置自增

修改方案:

重置自增运算符,设置无形参的重载函数,对所使用的对象进行自增,在通过return*this返回该对象。

3.前置自减

忘记在类中声明为友元函数。

正确代码:

obj2)//1

CComplexobj3(real+obj2.real,imag+obj2.imag);

operator++()//重载前置自增运算符//2

++real;

++imag;

return*this;

friendCComplex&

x);

//3

7.2.2程序设计

1.把7.2.1中第二道题的程序改造成能实现复数的减法、乘法、除法以及后置“++”、“--”运算,并设计主函数来验证重载运算符的用法。

CComplexoperator-(CComplex&

CComplexobj3(real-obj2.real,imag-obj2.imag);

CComplexoperator++(int)//重载后置自增运算符

CComplextemp(*this);

real++;

imag++;

returntemp;

CComplexoperator--(int)//重载后置自减运算符

CComplextemp(*this);

real--;

imag--;

if(imag>

=0){

else{

}

friendCComplexoperator*(CComplex&

//两个复数相乘

friendCComplexoperator/(CComplex&

//两个复数相除

CComplexoperator*(CComplex&

obj2){

returnCComplex((obj1.real*obj2.real-obj1.imag*obj2.imag),(obj1.imag*obj2.real+obj1.real*obj2.imag));

CComplexoperator/(CComplex&

returnCComplex((obj1.real*obj2.real+obj1.imag*obj2.imag)/(obj2.real*obj2.real+obj2.imag*obj2.imag),(obj1.imag*obj2.real-obj1.real*obj2.imag)/(obj2.real*obj2.real+obj2.imag*obj2.imag));

CComplexobj1(3,-1);

CComplexobj2(2,-1);

obj1*obj2="

CComplexobj3=obj1*obj2;

obj1/obj2="

CComplexobj4=obj1/obj2;

before++,obj2="

obj2=obj2++;

after++,obj2="

before--,obj2="

obj2=obj2--;

after--,obj2="

7.4实验总结

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

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1