C重载习题Word格式.docx
- 文档编号:20858491
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:9
- 大小:17.41KB
C重载习题Word格式.docx
《C重载习题Word格式.docx》由会员分享,可在线阅读,更多相关《C重载习题Word格式.docx(9页珍藏版)》请在冰豆网上搜索。
i="
i<
d="
d<
};
Samples;
s.setdata(10);
s.setdata(15.6);
s.disp();
本题说明重载成员函数的使用方法。
setdata()成员函数有两个,根据其参数类型加以区分。
i=10,d=15.6
03.分析以下程序的执行结果
intn;
Sample(){}
Sample(inti){n=i;
Sample&
operator=(Sample);
voiddisp(){cout<
n="
n<
Sample:
:
operator=(Samples)
n=s.n;
return*this;
Samples1(10),s2;
s2=s1;
s2.disp();
本题说明重载运算符(=)的使用方法。
operator=成员函数实现两个对象的赋值。
n=10
-------------------------------------------------
04.设计一个点类Point,实现点对象之间的各种运算。
Point类提供了6个运算符重载函数(参加程序中的代码和注释),以实现相应的运算。
本题程序如下:
classPoint
intx,y;
Point(){x=y=0;
Point(inti,intj){x=i;
y=j;
Point(Point&
);
~Point(){}
voidoffset(int,int);
//提供对点的偏移
voidoffset(Point);
//重载,偏移量用Point类对象表示
booloperator==(Point);
//运算符重载,判断两个对象是否相同
booloperator!
=(Point);
//运算符重载,判断两个对象是否不相同
voidoperator+=(Point);
//运算符重载,将两个点对象相加
voidoperator-=(Point);
//运算符重载,将两个点对象相减
Pointoperator+(Point);
//运算符重载,相加并将结果放在左操作数中
Pointoperator-(Point);
//运算符重载,相减并将结果放在左操作数中
intgetx(){returnx;
intgety(){returny;
("
x<
y<
)"
Point:
p)
x=p.x;
y=p.y;
voidPoint:
offset(inti,intj)
x+=i;
y+=j;
offset(Pointp)
x+=p.getx();
y+=p.gety();
boolPoint:
operator==(Pointp)
if(x==p.getx()&
&
y==p.gety())
return1;
else
return0;
operator!
=(Pointp)
if(x!
=p.getx()||y!
=p.gety())
operator+=(Pointp)
operator-=(Pointp)
x-=p.getx();
y-=p.gety();
PointPoint:
operator+(Pointp)
this->
x+=p.x;
this->
y+=p.y;
}
05.设计一个日期类Date,包括年、月、日等私有数据成员。
要求实现日期的基本运算,如一日期加上天数、一日期减去天数、两日期相差的天数等。
在Date类中设计如下重载运算符函数:
Dateoperator+(intdays);
返回一日期加一天数得到的日期
Dateoperator-(intdays);
返回一日期减去天数得到的日期
intoperator-(Date&
b);
返回两日期相差的天数
在实现这些重载运算符函数调用以下私有成员函数:
leap(int);
判断指定的年份是否为闰年
dton(Date&
将指定日期转换为从0年0月0日起的天数
ntod(int);
将指定的0年0月0日起的天数转换为对应的日期
intday_tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,31,30,31,30,31}};
//day_tab二维数组存放各月天数,第一行对应非闰年,第二行对应闰年
classDate
intyear,month,day;
intleap(int);
intdton(Date&
Datentod(int);
Date(){}
Date(inty,intm,intd)
year=y;
month=m;
day=d;
voidsetday(intd){day=d;
voidsetmonth(intm){month=m;
voidsetyear(inty){year=y;
intgetday(){returnday;
intgetmonth(){returnmonth;
intgetyear(){returnyear;
Dateoperator+(intdays)
staticDatedate;
intnumber=dton(*this)+days;
date=ntod(number);
returndate;
Dateoperator-(intdays)
intnumber=dton(*this);
number-=days;
b)
intdays=dton(*this)-dton(b)-1;
returndays;
year<
."
month<
day<
intDate:
leap(intyear)
if(year%4==0&
year%100!
=0||year%400==0)//是闰年
else//不是闰年
d)
inty,m,days=0;
for(y=1;
=d.year;
y++)
if(leap(y))
days+=366;
days+=365;
for(m=0;
m<
d.month-1;
m++)
if(leap(d.year))
days+=day_tab[1][m];
days+=day_tab[0][m];
days+=d.day;
DateDate:
ntod(intn)
inty=1,m=1,d,rest=n,lp;
while
(1)
if(rest<
=366)
break;
rest-=366;
=365)
rest-=365;
y++;
y--;
lp=leap(y);
if(lp)
if(rest>
day_tab[1][m-1])
rest-=day_tab[1][m-1];
day_tab[0][m-1])
rest-=day_tab[0][m-1];
m++;
d=rest;
returnDate(y,m,d);
Datenow(2002,6,12),then(2003,2,10);
now:
;
now.disp();
then:
then.disp();
相差天数:
(then-now)<
Dated1=now+100,d2=now-100;
now+100:
d1.disp();
now-100:
d2.disp();
本程序的执行结果如下:
2002.6.12
2003.2.10
242
2002.9.20
2002.3.4
题6.设计一个三角形类Triangle,包含三角形三条边长的私有数据成员,另有一个重载运算符“+”,以实现求两个三角形对象的面积之和。
在Triangle类中设计一个友元函数operator+(Trianglet1,Trianglet2),它重载运算符"
+"
,返回t1和t2两个三角形的面积之和。
math.h>
classTriangle
intx,y,z;
doublearea;
Triangle(inti,intj,intk)
doubles;
x=i;
z=k;
s=(x+y+z)/2.0;
area=sqrt(s*(s-x)*(s-y)*(s-z));
voiddisparea()
Area="
area<
frienddoubleoperator+(Trianglet1,Trianglet2)
returnt1.area+t2.area;
Trianglet1(3,4,5),t2(4,5,6);
t1:
t1.disparea();
t2:
t2.disparea();
s=t1+t2;
总面积="
s<
本程序执行结果如下:
Area=6
Area=9.92157
总面积=15.9216
-----------------------------------------------------------
题7.习题6的重载运算符“+”友元函数只能返回两个三角形的面积之和,不能计算三个三角形的面积之和,改进一下,使之能计算任意多个三角形的面积之和。
习题6的重载运算符为什么不能计算3个三角形的面积之和呢?
对于式子:
s=t1+t2+t3,先计算t1+t2,返回一个double数然后再进行该double数+t3的计算,显然没有这样的重载运算符“+”友元函数,只需要添加这样重载运算符“+”友元函数即可。
frienddoubleoperator+(doubled,Trianglet)
returnd+t.area;
Trianglet1(3,4,5),t2(4,5,6),t3(5,6,7),t4(6,7,8);
t3:
t3.disparea();
t4:
t4.disparea();
s=t1+t2+t3+t4;
Area=14.6969
Area=20.3332
总面积=50.9517
-------------------------------------------------------
题8.设计一个学生类student,包括姓名和三门课程成绩,利用重载运算符”+“将所有学生的成绩相加放在一个对象中,再对该对象求各门课程的平均分。
iomanip.h>
string.h>
classstudent
charname[10];
intdeg1,deg2,deg3;
student(){}
student(charna[],intd1,intd2,intd3)
strcpy(name,na);
deg1=d1;
deg2=d2;
deg3=d3;
friendstudentoperator+(students1,students2)
staticstudentst;
st.deg1=s1.deg1+s2.deg1;
st.deg2=s1.deg2+s2.deg2;
st.deg3=s1.deg3+s2.deg3;
returnst;
setw(10)<
name<
setw(5)<
deg1<
deg2<
deg3<
friendvoidavg(student&
s,intn)
平均分"
s.deg1/n<
s.deg2/n<
s.deg3/n<
students1("
Li"
78,82,86),s2("
Zheng"
75,62,89);
students3("
Ma"
89,87,95),s4("
Xu"
54,78,66),s;
输出结果"
s1.disp();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 重载 习题
![提示](https://static.bdocx.com/images/bang_tan.gif)