习题2Word文档格式.docx
《习题2Word文档格式.docx》由会员分享,可在线阅读,更多相关《习题2Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
=
7、下列关于运算符重载的说法错误的是(B)。
A.运算符重载保持固有的结合性和优先级
B.可以对C++中的所有运算符进行重载
C.运算符重载不能改变操作数的个数
D.在运算符函数中不能使用缺省的参数值
8、为了区别单目运算符的前置和后置运算,在后置运算符进行重载时,额外添加一个参数,其类型是(D)。
A.voidB.charC.floatD.int
9、已知类A有一个带double型参数的构造函数,且将运算符“+”重载为该类友元函数,若如下语句
Ax(2.5),y(3.6),z(0);
z=x+y;
能够正常运行,运算符重载函数operator+应在类中声明为(D)。
A.friendAoperator+(double,double);
B.friendAoperator+(double,A&
);
C.friendAoperator+(A&
double);
D.friendAoperator+(A&
A&
10、C++中对单目运算符进行重载的函数需要传入参数的个数为(A)。
A.0B.1C.2D.3
11、下列友元关系的描述中正确的是(D)。
A.可以传递
B.是类与类的关系
C.是一个类的成员函数与另一个类的关系
D.友元可以访问该类的所有成员,包括私有成员
12、友元运算符obj1>
ojb2被C++编译器解释为(A)。
A.operator>
(obj1,obj2)B.>
(obj1,obj2)
C.obj2.operator>
(obj1)D.obj1.operator>
(obj2)
13、下面对静态数据成员的特征中,说法错误的是(B)。
A.静态数据成员要在类体外进行初始化
B.静态数据成员不是所有对象所共用的
C.说应用静态成员时,要在静态数据成员名前加<
类名>
和作用域运算符
D.明静态数据成员时前边要加修饰符static
三、判断题
1、静态数据成员可以通过类名或对象名引用。
对
2、静态数据成员可以在类内或类外进行初始化。
错
3、在静态成员函数中可以访问本类中非静态的数据成员。
4、类的静态成员函数的初始化工作要放在类外进行。
错
5、若A是B的友元类,B是C的友元类,则A是C的友元类。
6、通过运算符重载,可以定义新的运算符。
7、C++中的所有运算符都能被重载。
8、运算符重载不能改变操作数的个数。
9、运算符重载不能改变其优先级与结合性。
10、在运算符重载函数中不能使用缺省的参数值。
四、分析题
1、
#include<
iostream.h>
classT
{
public:
T(intx){a=x;
b+=x;
};
Staticvoiddisplay(Tc)
{cout<
<
”a=”<
c.a<
’\t’<
”b=”<
c.b<
enld;
}
private:
inta;
staticintb;
};
intT:
b=5;
voidmain()
TA(3),B(5);
T:
display(A);
display(B);
}
2、
classpoint
{
point(floatx,floaty)
{a=x;
b=y;
cout<
”dian(“<
a<
”,”<
b<
”)”;
friendfloatd(point&
A,point&
B)
{returnsqrt((A.a-B.a)*(A.a-B.a)+(A.b-B.b)*(A.b-B.b));
private:
flaota,b;
};
voidmain()
{
pointp1(2,3);
cout<
”dao”;
pointp2(4,5);
”dejulishi:
”<
d(p1,p2)<
}
3、
classA
A(){a=5;
printa(){cout<
”A:
a=”<
endl;
inta;
friendclassB;
classB
voiddisplay1(At)
{t.a++;
cout<
”diaplay1:
t.a<
voiddisplay2(At){t.a--;
”display2:
Aobj1;
Bobj2;
obj1.printa();
obj2.display1(obj1);
obj2.display2(obj2);
4、
#include<
classpoint
{
point(inti,intj){x=i;
y=j;
voidprint(){cout<
'
('
x<
'
y<
)'
voidoperator+=(pointp)
x+=p.x;
y+=p.y;
voidoperator-=(pointp)
x-=p.x;
y-=p.y;
private:
intx,y;
voidmain()
pointp1(5,7),p2(4,3);
p1.print();
p2.print();
p1+=p2;
p2-=p1;
5、
#include<
classVector
Vector(inti=0,intj=0){x=i;
y=j;
voidDisplay(){cout<
"
("
"
)"
friendVectoroperator+(Vectorv1,Vectorv2);
intx,y;
Vectoroperator+(Vectorv1,Vectorv2)
Vectortv;
tv.x=v1.x+v2.x;
tv.y=v1.y+v2.y;
returntv;
intmain()
Vectorv1(1,2),v2(3,4),v3;
v3=v1+v2;
v3="
;
v3.Display();
return0;
6、
classPoint
floatx,y;
Point(floatg_x=0,floatg_y=0){x=g_x,y=g_y;
voidshow(){cout<
Pointoperator+(Pointp1)
{
returnPoint(x+p1.x,y+p1.y);
Pointp1(3,5),p2(2,4);
Pointp=p1+p2;
p.show();
五、编程题
1、定义一个Student类,在该类定义中包括:
一个数据成员score(分数)及两个静态数据成员total(总分)和count(学生人数)。
成员函数:
scoretotalcount(floats)用于设置分数、求总分和累计学生人数;
静态成员函数sum用于返回总分;
静态成员函数average用于求平均分。
在main函数中,创建三名学生,并调用上述函数求这三名学生的总分和平均分。
2、编写程序实现宾馆住宿客人管理。
定义客人类Guest,包含客人编号Num(按先后顺序自动生成)、姓名Name、住宿房号Room、房费fee,并定义静态成员Count,用于记录客人总数;
提供构造函数,显示信息函数Display,以及返回客人总数函数GetCount等。
在主函数中创建3个客人对象进行测试。
3、定义一个点类Point,包括X和Y两个坐标,通过友元函数计算两点的距离。
4、生成一个复数类Complex。
复数的实部和虚部分别为double型x和y。
重载运算符加、减、乘、除为类的成员函数,用来计算两个复数的加、减、乘、除运算。
5、在date类(包括年,月,日)中重载“+=”,计算一个整数和一个date类对象之和,并且返回date类对象。
例如在1997年2月20日,求出经过100天以后日期。
6、生成时间类Time。
类的每个成员包含私有数据成员h、m、s,分别表示当前时刻的小时、分钟和秒。
提供成员函数displayT(),显示当前时刻,重载“++”,“—”为Time类的成员函数,分别表示将当前时刻推后和提前一个小时。
时间的表示采用24小时制。
习题答案
1、AB:
bb
2、friendvoidF();
3、对象名,类名
4、提高程序的运行效率
5、成员函数,外部函数
6、静态
7、赋值运算符=,地址运算符&
8、sizeof()运算符,成员运算符(.),指向成员的指针运算符(*),作用域运算符(:
),条件运算符(?
)
9、成员函数,友元函数
10、整型(int)
11、参数传递
12、静态
13、:
:
14、友元函数
15、不可传递的
1、C2、D3、D4、C5、D6、A7、B8、D9、D10、A
11、D12、A13、B
1、√2、×
3、√4、×
5、×
6、×
7、×
8、√9、√10、√
a=3b=13
a=5b=13
点(3,4)到点(4,5)的距离是:
2.82843
A:
a=5
display1:
a=6
display2:
a=4
(5,7)
(4,3)
(9,10)
(-5,-7)
v3=(4,6)
(5,9)
classStudent
voidscoretotalcount(floats)
score=s;
total+=score;
count++;
staticfloatsum(){returntotal;
staticfloataverage(){returntotal/count;
floatscore;
staticfloattotal;
staticintcount;
floatStudent:
total=0;
intStudent:
count=0;
Students1,s2,s3;
s1.scoretotalcount(70);
s2.scoretotalcount(80);
s3.scoretotalcount(90);
total:
Student:
sum()<
average:
average()<
iostream>
string>
usingnamespacestd;
classGuest
Guest(stringn,stringr,doublef)
Num=++Count;
Name=n;
Room=r;
fee=f;
voiddisplay()
Num<
"
Name<
Room<
fee<
staticintGetCount()
returnCount;
intNum;
stringName;
stringRoom;
doublefee;
staticintCount;
intGuest:
Count=0;
Guestg1("
zhang"
101"
200);
Guestg2("
li"
201"
300);
Guestg3("
wang"
301"
500);
g1.display();
g2.display();
g3.display();
Total="
Guest:
GetCount()<
math.h>
Point(doublexi,doubleyi){X=xi;
Y=yi;
doubleGetX(){returnX;
doubleGetY(){returnY;
frienddoubleDistance(Point&
a,Point&
b);
doubleX,Y;
};
doubleDistance(Point&
b)
doubledx=a.X-b.X;
doubledy=a.Y-b.Y;
returnsqrt(dx*dx+dy*dy);
Pointp1(3.0,5.0),p2(4.0,6.0);
doubled=Distance(p1,p2);
cout<
Thisdistanceis"
<
d<
endl;
4、
classcomplex
doublex,y;
complex(doublexx=0,doubleyy=0)
x=xx;
y=yy;
voiddisplay()
i)"
complexoperator+(complex&
c1);
complexoperator-(complex&
complexoperator*(complex&
complexoperator/(complex&
complexcomplex:
operator+(complex&
c1)
complexc;
c.x=x+c1.x;
c.y=y+c1.y;
returnc;
operator-(complex&
c.x=x-c1.x;
c.y=y-c1.y;
operator*(complex&
c.x=x*c1.x-y*c1.y;
c.y=x*c1.y+y*c1.x;
operator/(complex&
c.x=x*c1.x+y*c1.y;
c.y=y*c1.x-x*c1.y;
complexc1(3,4),c2(4,-5),c3,c4,c5,c6;
c3=c1+c2;
c4=c1-c2;
c5=c1*c2;
c6=c1/c2;
c1="
c1.display();
c2="
c2.display();
c1+c2="
c3.display();
c1-c2="
c4.display();
c1*c2="
c5.display();
c1/c2="
c6.display();
5、
staticintday[12]={31,28,31,30,31,30,31,31,30,31,30,31};
classdate
date(){yy=0;
mm=0;
dd=0;
date(inty,intm,intd){yy=y;
mm=m;
dd=d;
voiddisplay(){cout<
yy<
mm<
dd<
frienddateoperator+=(datec,inti);
intyy,mm,dd;
dateoperator+=(datec,inti)
inta,b=c.mm;
a=i+c.dd;
while(a>
day[b-1])
a=a-day[b-1];
if(c.mm<
12)
c.mm++;
else
{
c.yy++;
c.mm=1;
b=c.mm;
b++;
c.dd=a;
datedate1(1997,2,20),date2;
date1:
date1.display();
date2=date1+=100;
date1+=100:
date2.display();
6、
classTime
inth,m,s;
Time(){h=0;
m=0;
s=0;
Time(inth1,intm1,ints1){h=h1;
m=m1;
s=s1;
Timeoperator++();
Timeoperator--();
h<
m<
s<
TimeTime:
operator++()
if(++h>
24)
h=h-24;
m=m;
s=s;
return*this;
operator--()
if(--h<
=0)
h=h+24;
Timetime1(2,20,35),time2;
time1:
time1.display();
time2=time1;
++time1;
++time1:
--time2;
--time1:
time2.display();