c++实验报告.docx
- 文档编号:7361737
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:13
- 大小:16.40KB
c++实验报告.docx
《c++实验报告.docx》由会员分享,可在线阅读,更多相关《c++实验报告.docx(13页珍藏版)》请在冰点文库上搜索。
c++实验报告
实验七项目名称:
多态
实验目的:
C++中运算符重载的基本操作
操作题一:
1.完成对分数的+,-,*,/进行重载为类的友元函数,提示如下:
a)请将已有程序1.cpp补充完整;
b)仔细阅读程序中注释语句。
思考题:
分析voidoptim()成员函数的功能?
2.请在实验报告中记下在VC6.0中调试程序过程中的系统错误,以及解决办法。
ps:
完成实验报告七,将思考题答案写在实验报告中!
题目
#include
#include
#include
usingnamespacestd;
classfraction
{
public:
fraction(intx=0,inty=1);
voidprint();//以“/”的分数形式输出
//定义重载运算符的友元函数
private:
intnumerator,denominator;//numerator为分子,denominator为分母
voidoptim();//详细分析该函数功能
};
voidfraction:
:
optim()//请解释出现的if-else对照的实际情况及do-while循环的作用
{
intgcd,min,max;
if(denominator==0)
{
cout<<"Azerodenominatorisinvalid"< exit (1); } gcd=(abs(numerator)>abs(denominator)? abs(denominator): abs(numerator)); if(gcd==0)return;//注意: return语句的特殊用法 if(abs(numerator)>abs(denominator)) { max=numerator; min=denominator; } else { min=numerator; max=denominator; } do { gcd=max%min; max=min; min=gcd; }while(gcd! =0); numerator/=max; denominator/=max; if(denominator<0) { numerator=-numerator; denominator=-denominator; } } fraction: : fraction(intx,inty) {//将构造函数补充完整 } voidfraction: : print() {//将该函数补充完整 } //四个运算符重载函数具体实现 intmain()//1.记下调试过程中出现的系统错误及解决办法;2.调试通过后将运行结果记在实验报告八中 { cout<<"输入测试数据: "< fractionr1(2,8),r2(23,45),r3,r4(-63,789),r5(3),r6(56,-894),r7(0,3),r8(-12,-48); cout<<"原始数据: r1(2,8)"< cout<<"处理后数据r1="; r1.print(); cout<<"原始数据: r2(23,45)"< cout<<"处理后数据r2="; r2.print(); cout<<"原始数据: r3"< cout<<"处理后数据r3="; r3.print(); cout<<"原始数据: r4(-63,789)"< cout<<"处理后数据r4="; r4.print(); cout<<"原始数据: r5(3)"< cout<<"处理后数据r5="; r5.print(); cout<<"原始数据: r6(56,-894)"< cout<<"处理后数据r6="; r6.print(); cout<<"原始数据: r7(0,3)"< cout<<"处理后数据r7="; r7.print(); cout<<"原始数据: r8(-12,-48)"< cout<<"处理后数据r8="; r8.print(); cout<<"下一组运算结果: "< r3=r1+r2; cout<<"r1+r2="; r3.print(); r3=r1-r2; cout<<"r1-r2="; r3.print(); r3=r1*r2; cout<<"r1*r2="; r3.print(); r3=r1/r2; cout<<"r1/r2="; r3.print(); return0; } 答案 #include #include #include //usingnamespacestd; classfraction { public: fraction(intx=0,inty=1); voidprint();//以“/”的分数形式输出 //定义重载运算符的友元函数 friendfractionoperator+(fractionf1,fractionf2); friendfractionoperator-(fractionf1,fractionf2); friendfractionoperator*(fractionf1,fractionf2); friendfractionoperator/(fractionf1,fractionf2); private: intnumerator,denominator;//numerator为分子,denominator为分母 voidoptim();//详细分析该函数功能 }; voidfraction: : optim()//请解释出现的if-else对照的实际情况及do-while循环的作用 { intgcd,min,max; if(denominator==0) { cout<<"Azerodenominatorisinvalid"< exit (1); } gcd=(abs(numerator)>abs(denominator)? abs(denominator): abs(numerator)); if(gcd==0)return;//注意: return语句的特殊用法 if(abs(numerator)>abs(denominator)) { max=numerator; min=denominator; } else { min=numerator; max=denominator; } do { gcd=max%min; max=min;//最大公约数 min=gcd; }while(gcd! =0);//最大公倍数numerator*denominator/max; numerator/=max;//numerator=numerator/max; denominator/=max;//denominator=denominator/max; //变成最简分数 if(denominator<0) { numerator=-numerator; denominator=-denominator; } } fraction: : fraction(intx,inty) {//将构造函数补充完整 numerator=x; denominator=y; } voidfraction: : print() {//将该函数补充完整 optim(); cout< } //四个运算符重载函数具体实现 fractionoperator+(fractionf1,fractionf2) { fractionf; f.numerator=f1.numerator*f2.denominator+f1.denominator*f2.numerator; f.denominator=f1.denominator*f2.denominator; returnf; } fractionoperator-(fractionf1,fractionf2) { fractionf; f.numerator=f1.numerator*f2.denominator-f1.denominator*f2.numerator; f.denominator=f1.denominator*f2.denominator; returnf; } fractionoperator*(fractionf1,fractionf2) { fractionf3; f3.numerator=f1.numerator*f2.numerator; f3.denominator=f1.denominator*f2.denominator; returnf3; } fractionoperator/(fractionf1,fractionf2) { fractionf4; f4.numerator=f1.numerator*f2.denominator; f4.denominator=f1.denominator*f2.numerator; returnf4; } intmain()//1.记下调试过程中出现的系统错误及解决办法;2.调试通过后将运行结果记在实验报告八中 { cout<<"输入测试数据: "< fractionr1(2,8),r2(23,45),r3,r4(-63,789),r5(3),r6(56,-894),r7(0,3),r8(-12,-48); cout<<"原始数据: r1(2,8)"< cout<<"处理后数据r1="; r1.print(); cout<<"原始数据: r2(23,45)"< cout<<"处理后数据r2="; r2.print(); cout<<"原始数据: r3"< cout<<"处理后数据r3="; r3.print(); cout<<"原始数据: r4(-63,789)"< cout<<"处理后数据r4="; r4.print(); cout<<"原始数据: r5(3)"< cout<<"处理后数据r5="; r5.print(); cout<<"原始数据: r6(56,-894)"< cout<<"处理后数据r6="; r6.print(); cout<<"原始数据: r7(0,3)"< cout<<"处理后数据r7="; r7.print(); cout<<"原始数据: r8(-12,-48)"< cout<<"处理后数据r8="; r8.print(); cout<<"下一组运算结果: "< r3=r1+r2; cout<<"r1+r2="; r3.print(); r3=r1-r2; cout<<"r1-r2="; r3.print(); r3=r1*r2; cout<<"r1*r2="; r3.print(); r3=r1/r2; cout<<"r1/r2="; r3.print(); return0; } 思考 #include #include #include usingnamespacestd; classfraction { public: fraction(intx=0,inty=1); voidprint();//以“/”的分数形式输出 private: intnumerator,denominator;//numerator为分子,denominator为分母 voidoptim();//详细分析该函数功能 }; voidfraction: : optim()//请解释出现的if-else对照的实际情况及do-while循环的作用 { intgcd,min,max; if(denominator==0) { cout<<"Azerodenominatorisinvalid"< exit (1); } gcd=(abs(numerator)>abs(denominator)? abs(denominator): abs(numerator)); if(gcd==0)return;//注意: return语句的特殊用法 if(abs(numerator)>abs(denominator)) { max=numerator; min=denominator;//ifelse语句是找出分子,分母较大 } else { min=numerator; max=denominator; } do//dowhile语句是辗转相减法。 { gcd=max%min; max=min; min=gcd; }while(gcd! =0); numerator/=max; denominator/=max;//这二步,分子分母同时除以最大公约数max; if(denominator<0) { numerator=-numerator;//感觉这个根本没有什么用,分子,分母同时变号,值也不变,我去掉了,也没有出现错误。 denominator=-denominator; } } fraction: : fraction(intx,inty) {//将构造函数补充完整 numerator=x; denominator=y; } voidfraction: : print() {//将该函数补充完整 optim(); cout< } intmain() { cout<<"输入测试数据: "< fractionr1(2,8),r2(23,45),r3,r4(-9,6),r5(100,-50),r6(-50,-100); cout<<"原始数据: r1(2,8)"< cout<<"处理后数据r1="; r1.print(); cout<<"原始数据: r2(23,45)"< cout<<"处理后数据r2="; r2.print(); cout<<"原始数据: r3"< cout<<"处理后数据r3="; r3.print(); cout<<"原始数据: r4(-9,6)"< cout<<"处理后数据r4="; r4.print(); cout<<"原始数据: r5(100,-50)"< cout<<"处理后数据r5="; r5.print(); cout<<"原始数据: r5(-50,-100)"< cout<<"处理后数据r5="; r6.print(); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 实验 报告