实验12 运算符重载.docx
- 文档编号:11743568
- 上传时间:2023-03-31
- 格式:DOCX
- 页数:31
- 大小:86.66KB
实验12 运算符重载.docx
《实验12 运算符重载.docx》由会员分享,可在线阅读,更多相关《实验12 运算符重载.docx(31页珍藏版)》请在冰豆网上搜索。
实验12运算符重载
实验12运算符重载
(2)
牛旭艳智能二班20110807201
一、实验目的
1、进一步理解运算符重载,运用成员函数和友元函数等方法实现运算符的重载。
二、实验内容
1、重载函数调用运算符(),将以下的二维数组的下标表示方法:
chessBoard[row][column]改为常用的表示方法:
chessBoard(row,column)
2、重载下标运算符使之返回集合中最大的元素、次最大的元素以及第三大的元素。
3、开发多项式类Polynomial,多项式的每一项用数组表示,每项包含一个系数和一个指数。
例如:
2x4的指数为4,系数为2。
请开发一个完整的Polynomial类,包括构造函数、析构函数以及"get"函数和"set"函数。
该类还要提供下述重载的运算符(分别使用成员函数和友元函数):
1)重载加法运算符+,将两个多项式相加;
2)重载减法运算符-,将两个多项式相减;
3)重载赋值运算符=,将一个多项式赋给另外一个多项式;
4)重载乘法算符*,将两个多项式相乘;
5)重载加法赋值运算符+=、减法赋值运算符-=以及乘法赋值运算符*=。
4.设计一个日期类Date,,要求:
(1)包含年(year)、月(month)和日(day)私有数据成员。
(2)包含构造函数,重载关于一日期加上天数的加法运算符+、重载关于一日期减去天数的减加运算符-、重载输出运算符<<与输入运算符>>等。
提示:
由于各C++编译器对于重载输入/出运算符为友元的兼容性都存在问题,最好重载输入/出运算符不声明为成员函数与友元函数,而声明一般函数,为编程更方便,可增加一些成员函数,比如:
voidSetYear(inty);//设置年
intSetMonth(intm);//设置月
intSetDay(intd);//设置日
intGetYear()const;//返回年
intGetMonth()const;//返回月
intGetDay()const;//返回日
staticintIsLeapyear(inty);//判断年份y是否为润年
staticintGetDays(inty);//年份y的天数
staticintGetDays(constDate&d);//日期d当前月份的天数
staticintDateToNum(constDate&d);//返回从公元1年1月1日起的天数
staticDateNumToDate(intn);//由从公元1年1月1日起的天数返回日期
润年条件:
年份能被4整除,并且年份不能被100整除,或者年份能被400整除
润年天数:
366
平年天数:
365
润年2月份天数:
29
平年2月份天数:
28
5.设计一个时间类Time,要求:
(1)包含时(hour)、分(minute)和秒(second)私有数据成员。
(2)包含构造函数,重载关于一时间加上另一时间的加法运算符+、重载关于一时间减去另一时间的减加运算符-、重载输出运算符<<与输入运算符>>等。
提示:
可仿照第4题编程实现,可将时间转换成秒数,将秒数转成时间进行辅助编程。
时间转换成秒数:
秒数=时*3600+分*60+秒
秒数转换成时间:
时=秒数/3600
分=(秒数-时*3600)/60
秒=秒数%60
为编程更方便,可增加一些成员函数,比如:
voidSetHour(inthh);//设置小时
voidSetMinute(intmm);//设置分钟
voidSetSecond(intss);//设置秒
intGetHour()const;//返回小时
intGetMinute()const;//返回分钟
intGetSecond()const;//返回秒
3、实验程序及结果
1、
#include
usingnamespacestd;
classchessBoard
{
private:
inta[2][2];
public:
chessBoard(inty,intb,intc,intd)
{
a[0][0]=y;
a[0][1]=b;
a[1][0]=c;
a[1][1]=d;
}
int&operator()(intb,intc);
};
int&chessBoard:
:
operator()(intb,intc)
{
returna[b][c];
}
intmain()
{
chessBoardv(1,2,3,4);
v(0,1)=v(1,0);
cout< return0; } 2、 #include classxiabiao { public: xiabiao()//构造函数赋予数组初值 { for(inti=0;i<10;i++) if(i>5) jihe[i]=(-1)*2*i; else jihe[i]=i+3; cout<<"所有元素: "< for(i=9;i>=0;i--) cout< } int&operator[](inta) { intt; for(inti=0;i<10;i++)//冒泡排序大的放前面 for(intj=0;j<9-i;j++) { if(jihe[j] { t=jihe[j]; jihe[j]=jihe[j+1]; jihe[j+1]=t; } } returnjihe[a-1]; } private: intjihe[10]; }; intmain() { xiabiaoxi; cout<<"最大的为: "< cout<<"第二的为: "< cout<<"第三的为: "< return0; } 3、 #include #include classPolynomial { public: Polynomial(); Polynomialoperator+(constPolynomial&)const; Polynomialoperator-(constPolynomial&)const; Polynomialoperator*(constPolynomial&); Polynomial&operator+=(constPolynomial&); Polynomial&operator-=(constPolynomial&); Polynomial&operator*=(constPolynomial&); voidEnterTerms();//输入函数 voidPrintPolynomial()const;//打印函数 private: intexponents[100]; intcoefficients[100]; voidpolynomialCombine(Polynomial&);//合并同类项 }; Polynomial: : Polynomial() { for(inti=0;i<100;i++)//置零 { coefficients[i]=0; exponents[i]=0; } } voidPolynomial: : PrintPolynomial()const//输出函数 { intstart;//输出累加系数 boolzero=false; if(coefficients[0])//常数存在 { cout< start=1; zero=true; } else { if(coefficients[1]) { cout< if((exponents[1]! =0)&&(exponents[1]! =1)) cout<<'^'< zero=true; } start=2; } for(intx=start;x<100;x++)//输出其他各项 if(coefficients[x]! =0) { cout< : showpos)< < : showpos)<<'x'; if((exponents[x]! =0)&&(exponents[x]! =1)) cout<<'^'< zero=true; } if(! zero)//多项式为空 cout<<'0'; cout< } PolynomialPolynomial: : operator+(constPolynomial&r)const { Polynomialtemp; boolexponentExists; temp.coefficients[0]=coefficients[0]+r.coefficients[0];//计算常量之和 for(ints=1;(s<100)&&(r.exponents[s]! =0);s++) { temp.coefficients[s]=r.coefficients[s]; temp.exponents[s]=r.exponents[s]; } for(intx=1;x<100;x++)//计算其他各项之和 { exponentExists=false; for(intt=1;(t<100)&&(! exponentExists);t++) if(exponents[x]==temp.exponents[t]) { temp.coefficients[t]+=coefficients[x]; exponentExists=true; } if(! exponentExists) { temp.exponents[s]=exponents[x]; temp.coefficients[s]+=coefficients[x]; s++; } } returntemp; } Polynomial&Polynomial: : operator+=(constPolynomial&r) { *this=*this+r; return*this; } PolynomialPolynomial: : operator-(constPolynomial&r)const { Polynomialtemp; boolexponentExists; temp.coefficients[0]=coefficients[0]-r.coefficients[0]; for(ints=1;(s<100)&&(exponents[s]! =0);s++) { temp.coefficients[s]=coefficients[s]; temp.exponents[s]=exponents[s]; } for(intx=1;x<100;x++) { exponentExists=false; for(intt=1;(t<100)&&(! exponentExists);t++) if(r.exponents[x]==temp.exponents[t]) { temp.coefficients[t]-=r.coefficients[x]; exponentExists=true; } if(! exponentExists) { temp.exponents[s]=r.exponents[x]; temp.coefficients[s]-=r.coefficients[x]; s++; } } returntemp; } Polynomial&Polynomial: : operator-=(constPolynomial&r) { *this=*this-r; return*this; } PolynomialPolynomial: : operator*(constPolynomial&r) { Polynomialtemp; ints=1; for(intx=0;(x<100)&&(x==0||coefficients[x]! =0);x++) for(inty=0;(y<100)&&(y==0||r.coefficients[y]! =0);y++) if(coefficients[x]*r.coefficients[y]) if((exponents[x]==0)&&(r.exponents[y]==0)) temp.coefficients[0]+=coefficients[x]*r.coefficients[y]; else { temp.coefficients[s]=coefficients[x]*r.coefficients[y]; temp.exponents[s]=exponents[x]+r.exponents[y]; s++; } polynomialCombine(temp);//合并同类项 returntemp; } voidPolynomial: : polynomialCombine(Polynomial&w) { Polynomialtemp=w; intexp; for(intx=0;x<100;x++) { w.coefficients[x]=0; w.exponents[x]=0; } for(x=1;x<100;x++) { exp=temp.exponents[x]; for(inty=x+1;y<100;y++) if(exp==temp.exponents[y]) { temp.coefficients[x]+=temp.coefficients[y]; temp.exponents[y]=0; temp.coefficients[y]=0; } } w=temp; } Polynomial&Polynomial: : operator*=(constPolynomial&r) { *this=*this*r; return*this; } voidPolynomial: : EnterTerms()//初始函数 { boolfound=false; intnumberOfTerms,c,e; cout<<"Enternumberofpolynomialterms: "; cin>>numberOfTerms; for(intn=1;n<=numberOfTerms;n++) { cout<<"Entercoefficient: ";//系数 cin>>c; cout<<"Enterexponent: ";//阶数 cin>>e; if(c! =0) { if(e==0)//初始置零 { coefficients[0]+=c;//常数 continue; } for(intterm=1;(term<100)&&(coefficients[term]! =0);term++)//找是否阶数相同 if(e==exponents[term]) { coefficients[term]+=c; exponents[term]=e; found=true; } if(! found)//阶数不同另外储存 { coefficients[term]+=c; exponents[term]=e; } } } } voidmain() { Polynomiala,b,c,t,d; a.EnterTerms(); b.EnterTerms(); cout< "; a.PrintPolynomial(); cout< "; b.PrintPolynomial(); cout< "; c=a+b; c.PrintPolynomial(); cout< "; t=a; a+=b; a.PrintPolynomial(); cout< "; a=t; c=a-b; c.PrintPolynomial(); cout< "; a-=b; a.PrintPolynomial(); cout< "; a=t; c=a*b; c.PrintPolynomial(); cout< "; a*=b; a.PrintPolynomial(); cout< } 4、 #include"iostream.h" classDate { public: Date(inta=0,intb=0,intc=0); voidSet_Date(inta,intb,intc); voidGet_Date(); Dateoperator+(int); Dateoperator-(int); friendostream&operator<<(ostream&,Date&); friendistream&operator>>(istream&,Date&); private: intyear,mounth,date,m; }; Date: : Date(inta,intb,intc) { year=a; mounth=b; date=c; m=1; } voidDate: : Set_Date(inta,intb,intc) { year=a; mounth=b; date=c; } voidDate: : Get_Date() { if(m==1) cout< else cout<<"刚才输入的天数不符合要求! "< } DateDate: : operator+(inta) { if(a>28) { m=0; return*this; } else { if((year%400==0)||((year%4==0)&&(year%100! =0))) { if((mounth==4)||(mounth==6)||(mounth==9)||(mounth==11)) { if((date+a)<=30) date=date+a; else { date=date+a-30; mounth++; } } else { if(mounth==2) { if((date+a)<=29) date=date+a; else { date=date+a; mounth++; } } else { if((date+a)<=31) date=date+a; else { date=date+a-31; if(mounth==12) { year++; mounth=1; } else mounth++; } } } } else { if((mounth==4)||(mounth==6)||(mounth==9)||(mounth==11)) { if((date+a)<=30) date=date+a; else { date=date+a-30; mounth++; } } else { if(mounth==2) { if((date+a)<=28) date=date+a; else { date=date+a-28; mounth++; } } else { if((date+a)<=31) date=date+a; else { date=date+a-31; if(mounth==12) { year++;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验12 运算符重载 实验 12 运算 重载
![提示](https://static.bdocx.com/images/bang_tan.gif)