C++面向对象编程题.docx
- 文档编号:26537878
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:15
- 大小:23.98KB
C++面向对象编程题.docx
《C++面向对象编程题.docx》由会员分享,可在线阅读,更多相关《C++面向对象编程题.docx(15页珍藏版)》请在冰豆网上搜索。
C++面向对象编程题
C++面向对象编程题
以下程序是Student类,请根据程序注释完成填空。
#includelt;iostreamgt;#includelt;stringgt;#includelt;iomanipgt;usingnamespacestd;classStudent{public:
voidInit(stringname){this-gt;name=name;}double;operator[](int);//声明重载下标运算符[]stringgetName{returnname;//返回学生姓名}private:
stringname;//学生姓名doublem_score[3];//学生的三门课成绩};double;Student:
:
operator[](ints){//重载运算符[]的函数定义if(slt;0||sgt;2){cerrlt;lt;t;badsubscript!
t;lt;lt;slt;lt;t;isnotallowed.t;lt;lt;endl;abort;}returnm_score[s];//返回第s个下标值}intmain{doublesum=0,ave=0;Studentstudent;//声明一个学生对象student.Init(t;Zhangsant;);student.operator[](0)=77;//第一门课程成绩为77student.operator[]
(1)=88;//第二门课程成绩为88student.operator[]
(2)=99;//第三门课程成绩为99coutlt;lt;student.getNamelt;lt;t;"sscores:
t;;for(inti=0;ilt;3;i++){coutlt;lt;setw(5)lt;lt;student[i];sum+=student[i];}ave=sum/3;coutlt;lt;t;\nTheaverageis:
t;lt;lt;avelt;lt;endl;return0;}第一行输出结果为Zhangsan"sscores:
778899第二行输出结果为Theaverageis:
88Point类【问题描述】编写Point类,重载+=和-=运算符,能够完成p1+=p2和p1-=p2的功能。
【输入形式】int,int【输出形式】【样例输入】1234【样例输出】p1=(1,2)p2=(3,4)p3=(4,6)p4=(-2,-2)#includelt;iostreamgt;usingnamespacestd;classPoint{public:
int_;inty;public:
Point(inta,intb){_=a;
y=b;}voidshow{coutlt;lt;t;(t;lt;lt;_lt;lt;t;,t;lt;lt;ylt;lt;t;)t;lt;lt;endl;}Point;operator+=(constPoint;c){_=_+c._;y=y+c.y;return_this;}Point;operator-=(constPoint;c){_=_-c._;y=y-c.y;return_this;}};intmain{int_1,y1,_2,y2;cingt;gt;_1gt;gt;y1gt;gt;_2gt;gt;y2;Pointp1(_1,y1),p2(_2,y2),p3(0,0),p4(0,0);coutlt;lt;t;p1=t;;p1.show;coutlt;lt;t;p2=t;;p2.show;p3=p1;p4=p2;p1+=p2;p3-=p4;coutlt;lt;t;p3=t;;p1.show;coutlt;lt;t;p4=t;;p3.show;return0;}设计并实现一个日期类Date【问题描述】设计并实现一个日期类Date,要求:
(1)可以建立具有指定日期(年、月、日)的Date对象,默认日期是20_.1.1。
(2)可以从输出流输出一个格式为“年-月-日”的日期,其中年是四位数据,月、日可以是一位也可以是两位数据。
(3)可以动态的设置年月日(4)可以用运算符==对两个日期进行是否相等的比较(5)可以用运算符++、+=来完成天数的增加一天和若干天的操作。
(6)Date类必须能够正确表达日期,不会出现类似于13月,32日一类的情况。
Date类还必须处理闰年的问题。
#includelt;iostreamgt;usingnamespacestd;classDate{public:
Date(inty=20_,intm=1,intd=1):
year(y),month(m),day(d){}//构造函数boolisLeap;//判断是否为闰年intdays;//计算该日期在全年中是第几天并返回voidsetDate(int,int,int);//重新设置年月日friendostream;operatorlt;lt;(ostream;,Date;);//输出年月日friendbooloperator==(constDate;,constDate;);//比较两个日期是否相等Date;operator++;//增加一天Date;operator+=(int);//增加若干天private:
intyear,month,day;staticintads[13];//存放每月的天数,ads[0]赋值为0};//判断是否为闰年boolDate:
:
isLeap{boolflag=false;if((year4==0;;year100!
=0)||year400==0)flag=true;returnflag;}//计算该日期在全年中是第几天并返回intDate:
:
days{intdays=0;inta[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//满月的天数for(inti=0;ilt;month;i++){days+=a[i];}//未满月的天数days=days+day;//判断是否为闰年if(monthgt;2){if(isLeap)days+=1;}returndays;}//重新设置年月日voidDate:
:
setDate(inty=20_,intm=1,intd=1){year=y;month=m;day=d;}//输出年月日ostream;operatorlt;lt;(ostream;output,Date;d){outputlt;lt;d.yearlt;lt;t;-t;lt;lt;d.monthlt;lt;t;-t;lt;lt;d.daylt;lt;endl;returnoutput;}//比较两个日期是否相等booloperator==(constDate;a,constDate;b){boolflag=false;if(a.year==b.year;;a.month==b.month;;a.day==b.day){flag=true;}returnflag;}//增加一天Date;Date:
:
operator++{day++;intmonths[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};if(isLeap){months[2]=29;}if(daygt;months[month]){day-=months[month];month+=1;if(monthgt;12){month=1;year+=1;}}return_this;}//增加若干天Date;Date:
:
operator+=(int_){day+=_;intmonths[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};if(isLeap){months[2]=29;}while(daygt;months[month])
{day-=months[month];month+=1;if(monthgt;12){month=1;year+=1;}}return_this;}intmain{intyear,month,day;cingt;gt;yeargt;gt;monthgt;gt;day;Dated1,d2(year,month,day),_d3=newDate;//声明三个类对象d1,d2,d3,其中d2使用上面输入的year/month.day,d1和d3使用默认值d3-gt;setDate(2021,11,30);coutlt;lt;t;d1:
t;lt;lt;d1;coutlt;lt;t;d1isthet;lt;lt;d1.dayslt;lt;t;days.\nt;;coutlt;lt;t;d2:
t;lt;lt;d2;coutlt;lt;t;d2isthet;lt;lt;d2.dayslt;lt;t;days.\nt;;coutlt;lt;t;d3:
t;lt;lt;_d3;coutlt;lt;t;d3isthet;lt;lt;d3-gt;dayslt;lt;t;days.\nt;;coutlt;lt;t;d1==d2:
t;lt;lt;(d1==d2)lt;lt;endl;++d1;coutlt;lt;t;++d1:
t;lt;lt;d1;_d3+=3;coutlt;lt;t;d3+=3:
t;lt;lt;_d3lt;lt;endl;deleted3;//释放d3return0;}矩阵类Marit_(实验10)#includelt;iostreamgt;usingnamespacestd;classMatri_{private:
intarr[2][4];public:
friendistream;operatorgt;gt;(istream;input,Matri_;m);friendostream;operatorlt;lt;(ostream;output,Matri_;m);Matri_operator+(Matri_;m2);};istream;operatorgt;gt;(istream;input,Matri_;m){for(inti=0;ilt;2;i++){for(intj=0;jlt;4;j++){inputgt;gt;m.arr[i][j];}}returninput;}ostream;operatorlt;lt;(ostream;output,Matri_;m){for(inti=0;ilt;2;i++){for(intj=0;jlt;4;j++){outputlt;lt;m.arr[i][j]lt;lt;t;t;;}outputlt;lt;endl;}returnoutput;}Matri_Matri_:
:
operator+(Matri_;m){Matri_temp;for(inti=0;ilt;2;i++){for(intj=0;jlt;4;j++){temp.arr[i][j]=arr[i][j]+m.arr[i][j];}}returntemp;}intmain{Matri_a,b,c;cingt;gt;agt;gt;b;coutlt;lt;t;Matri_a:
t;lt;lt;endl;coutlt;lt;a;coutlt;lt;t;Matri_b:
t;lt;lt;endl;coutlt;lt;b;c=a+b;coutlt;lt;t;Matri_c=Matri_a+Matri_b:
t;lt;lt;endl;coutlt;lt;c;}CArray类【问题描述】下面是一个数组类CArray的定义,其中已给出了其部分成员函数的实现代码。
请补充剩余成员函数。
【输入形式】【输出形式】【样例输入】12345678910【样例输出】b=12345678910c=12345678910d=2468101214161820e=0000000000#includelt;iostreamgt;usingnamespacestd;classCArray{public:
CArray;//默认构造函数CArray(int_,int);//带参构造函数CArray(constCArray;);//拷贝构造函数~CArray;//析构函数intoperator[](int)const;//对访问数组元素的下标运算符进行重载int;operator[](int);//对设置数组元素的下标运算符进行重载friendCArrayoperator+(constCArray;,constCArray;);//对加法运算符t;+t;进行重载friendCArrayoperator-(constCArray;,constCArray;);//对减法运算符t;+t;进行重载friendostream;operatorlt;lt;(ostream;,constCArray;);//对输出运算符lt;lt;进行重载private:
int_
p_arr;intsize;};intCArray:
:
operator[](intpos)const{if(posgt;=size)returnp_arr[size-1];if(poslt;0)returnp_arr[0];returnp_arr[pos];}CArray:
:
CArray{p_arr=NULL;size=0;}CArray:
:
CArray(int_
p_a,ints){if(sgt;0){size=s;p_arr=newint[size];for(inti=0;ilt;size;i++)
p_arr[i]=p_a[i];}else{p_arr=NULL;size=0;}}CArray:
:
CArray(constCArray;r_other){size=r_other.size;if(sizegt;0){p_arr=newint[size];for(inti=0;ilt;size;i++)p_arr[i]=r_other.p_arr[i];}}CArray:
:
~CArray{if(p_arr)delete[]p_arr;p_arr=NULL;size=0;}CArrayoperator+(constCArray;a,constCArray;b){CArrayc=a;for(inti=0;ilt;10;i++){c.p_arr[i]=a.p_arr[i]+b.p_arr[i];}c.size=a.size;returnc;}CArrayoperator-(constCArray;a,constCArray;b){CArrayc=a;for(inti=0;ilt;10;i++){c.p_arr[i]=a.p_arr[i]-b.p_arr[i];}c.size=a.size;returnc;}ostream;operatorlt;lt;(ostream;out,constCArray;a){for(inti=0;ilt;10;i++){outlt;lt;a.p_arr[i]lt;lt;t;t;;}outlt;lt;endl;returnout;}int;CArray:
:
operator[](intn){returnp_arr[n];}voidinput(int_
a){for(inti=0;ilt;10;i++)cingt;gt;_(a+i);}intmain{inta[10];input(a);CArrayb(a,10);coutlt;lt;t;b=t;lt;lt;b;CArrayc=b;coutlt;lt;t;c=t;lt;lt;c;CArrayd=b+c;coutlt;lt;t;d=t;lt;lt;d;CArraye=b-c;coutlt;lt;t;e=t;lt;lt;e;return0;}实现ple_类【问题描述】定义一个描述复数的类,其中成员数据包括实部和虚部(double),成员函数包括构造函数(默认实部、虚部都是0),重载+、-、_、/、+=、gt;gt;、lt;lt;等各个运算符。
请完成成员函数的实现,并且按照注释完成main函数。
#includelt;iostreamgt;usingnamespacestd;classple_{public:
ple_(doubler=0,doublei=0):
real(r),image(i){}ple_operator+(ple_;);//重载加法运算符friendple_operator-(ple_;,ple_;);//重载减法运算符ple_operator+=(ple_;);//重载复合赋值运算符friendple_operator_(ple_;,ple_;);//重载乘法运算符friendple_operator/(ple_;,ple_;);//重载除法运算符friendistream;operatorgt;gt;(istream;,ple_;);//重载输入运算符friendostream;operatorlt;lt;(ostream;,ple_;);//重载输出运算符private:
doublereal,image;//实数的实部、虚部};ple_ple_:
:
operator+(ple_;a){returnple_(real+a.real,image+a.image);}ple_operator-(ple_;a,ple_;b){returnple_(a.real-b.real,a.image-b.image);}ple_ple_:
:
operator+=(ple_;a){real+=a.real;image+=a.image;return_this;}ple_operator_(ple_;a,ple_;b){ple_c;c.real=a.real_b.real-a.image_b.image;c.image=a.image_b.real+b.image_a.real;returnc;}ple_operator/(ple_;a,ple_;b){returnple_((a.real_b.real+a.image_b.image)/(b.real_b.real+b.image_b.image),(a.image_b.real-a.real_b.image)/(b.real_b.real+b.image_b.image));}istream;operatorgt;gt;(istream;in,ple_;m){ingt;gt;m.realgt;gt;m.image;returnin;}ostream;operatorlt;lt;(ostream;out,ple_;m){coutlt;lt;m.reallt;lt;t;+t;lt;lt;m.imagelt;lt;t;it;lt;lt;endl;returnout;}intmain{double_1,y1,_2,y2;cingt;gt;_1gt;gt;y1gt;gt;_2gt;gt;y2;ple_c1(_1,y1),c2(_2,y2),_c3=newple_;//定义三个类对象c1,c2,c3,其中c1的实部虚部分别为_1,y1,c2的实部虚部分别为_2,y2coutlt;lt;t;c1=t;lt;lt;c1;coutlt;lt;t;c2=t;lt;lt;c2;coutlt;lt;t;c3=t;lt;lt;_c3;
_c3=c1+c2;coutlt;lt;t;c1+c2=t;lt;lt;_c3;_c3=c1-c2;coutlt;lt;t;c1-c2=t;lt;lt;_c3;_c3=c1_
c2;coutlt;lt;t;c1_c2=t;lt;lt;_c3;_c3=c1/c2;coutlt;lt;t;c1/c2=t;lt;lt;_c3;c1+=c2;coutlt;lt;t;c1=t;lt;lt;c1;c2+=c2;coutlt;lt;t;c2=t;lt;lt;c2;return0;}Point类【问题描述】设计一个点类Point,实现点对象之间的各种运算。
该类还要提供下述重载的运算符:
(1)重载==运算符,判断两个对象是否相同。
(2)重载!
=运算符,判断两个对象是否不相同。
(3)重载+=运算符,将两个点对象相加。
(4)重载-=运算符,将两个点对象相减。
(5)重载+运算符,相加并将结果放在左操作数中。
(6)重载-运算符,相减并将结果放在左操作数中。
(7)重载lt;lt;运算符,按照(_,y)的格式输出点对象。
#includelt;iostreamgt;usingnamespacestd;classPoint{public:
Point(double_=0,doubley=0):
_(_),y(y){}friendbooloperator==(Point;a,Point;b);friendbooloperator!
=(Point;,Point;);Point;operator+=(Point;);Point;operator-=(Point;);fri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 面向 对象 编程
![提示](https://static.bdocx.com/images/bang_tan.gif)