面向对象程序设计作业参考答案Word文件下载.docx
- 文档编号:19738013
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:16
- 大小:19.40KB
面向对象程序设计作业参考答案Word文件下载.docx
《面向对象程序设计作业参考答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计作业参考答案Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
inta,b;
a=b=0;
intc=a+b;
”a+b=”<
a+b;
9、输入以下程序,进行编译,观察编译情况,如果有错误,请修改程序,在进行编译,直到没有错误,然后进行连接和运行,分析运行结果。
intadd(intx,inty);
inta=0,b=0;
intc=add(a,b);
"
a+b="
c<
intadd(intx,inty)
intz=x+y;
returnz;
习题二
1、请检查下面的程序,找出其中的错误(先不要上机,在纸面上作人工检查),并改正之。
然后上机调试,使之能正常运行。
运行时从键盘输入时、分、秒的值,检查输出是否正确。
改正以后的程序如下:
classTime
public:
voidset_time(void);
voidshow_time(void);
private:
inthour;
intminute;
intsec;
};
Timet;
t.set_time();
t.show_time();
voidTime:
:
set_time(void)
cin>
>
hour;
minute;
sec;
show_time(void)
hour<
minute<
sec<
6、需要求3个长方柱的体积,请编写一个基于对象的程序。
数据成员包括length(长)、width(宽)、height(高)。
要求用成员函数实现一以下功能:
(1)由键盘分别输入3个长方柱的长、宽、高;
(2)计算长方柱的体积;
(3)输出3个长方柱的体积;
请编写程序,上机调试并运行。
参考程序如下:
classCuboid
voidSetValue()
{
for(inti=0;
i<
3;
i++)
{
cin>
length[i];
width[i];
height[i];
}
}
voidcalArea()
area[i]=length[i]*width[i]*height[i];
voidshowArea()
calArea();
cout<
长方柱"
i<
的面积为:
<
area[i]<
doublelength[3],width[3],height[3],area[3];
Cuboidc;
c.SetValue();
c.showArea();
习题三
1、构造函数和析构函数的作用是什么?
什么时候需要自己定义构造函数和析构函数?
答:
构造函数的作用:
用来初始化对象。
析构函数的作用:
在删除一个对象前被调用,释放该对象成员的内存空间,以及其它一些清理工作。
用户需要按照一定的需求去初始化对象时,需要定义构造函数。
同理,释放对象时,用户需要按照一定的需求去释放内存或者其他清理工作,需要定义析构函数。
2、分析下面的程序,写出其运行时的输出结果。
classDate
Date(intm,intd,inty):
month(m),day(d),year(y){}
Date(intm,intd):
month(m),day(d){year=2005;
Date(intm):
month(m){day=1;
year=2005;
Date(){month=1;
day=1;
voiddisplay(){cout<
month<
/"
day<
year<
intyear,month,day;
intmain(){
Dated1(10,13,2005);
Dated2(12,30);
Dated3(10);
Dated4;
d1.display();
d2.display();
d3.display();
d4.display();
输出结果如下:
10/13/2005
12/30/2005
10/1/205
1/1/2005
3、题目略。
答:
有问题,Dated2(12,30);
这行代码具有二义性,可以调用第一个构造函数,也可以调用第四个构造函数。
Dated3(10)这行代码具有二义性,可以调用第一个构造函数,也可以调用第三个构造函数。
Dated4;
这行代码具有二义性,可以调用第一个构造函数,也可以调用第二个构造函数。
解决的办法就是去掉第二、三和四个构造函数。
4、建立一个对象数组,内放5个学生的数据(学号、成绩),用指针指向数组首元素,输出第1,3,5个学生的数据。
程序代码如下:
classStudent
Student(intn,floats):
num(n),score(s){}
num<
"
score<
intnum;
floatscore;
Students[5]={Student(1,91),Student(2,92),Student(3,93),Student(4,94),Student(5,95)};
Student*ps=s;
ps->
display();
ps++;
6、阅读下面的程序,分析其执行结果,写出输入结果。
voidchange(intn,floats){num=n;
score=s;
Studentstud(101,78.5);
stud.display();
stud.change(101,80.5);
10178.5
10180.5
7、将第6题得程序分别做如下修改,分析所修改部分的函数以及编译和运行的情况。
(1)将main函数第2行改为
constStudentstud(101,78.5);
有错误,常对象只能调用常成员函数,而display和change函数都不是常成员函数。
(2)在
(1)的基础上修改程序,是只能正常运行,用change函数修改数据成员num和score的值。
首先将change和display成员函数修改为常成员函数,然后将数据成员num和score修改为可变类型(在num和score的数据类型前加mutable)。
(3)将main函数改为
Student*p=&
stud;
p->
change(101,80.5);
其他部分仍同第6题的程序。
(4)在(3)的基础上将main函数改为
constStudent*p=&
有错误。
p指针是个常量指针,指向的是一个常对象,故而解决的办法同题
(2)。
(5)在把main函数第3行改为
Student*constp=&
没有错误。
p指针是个指针常量,指向stud以后不能再指向其他对象。
习题四
1、定义一个复数类Complex,重载运算符“+”、“=”,“*”,“、”,使之能进行复数的加、减、乘、除。
运算符重载函数作为Complex类得成员函数。
编程序,分别求两个复数之和、差、积和商。
cmath>
classComplex{
Complex(doubler=0,doublei=0);
Complexoperator+(constComplex&
c);
Complexoperator-(constComplex&
Complexoperator*(constComplex&
Complexoperator/(constComplex&
voidprint()const;
doublereal,imag;
Complex:
Complex(doubler,doublei){
real=r;
imag=i;
ComplexComplex:
operator+(constComplex&
c){
doubler=real+c.real;
doublei=imag+c.imag;
returnComplex(r,i);
operator-(constComplex&
doubler=real-c.real;
doublei=imag-c.imag;
operator*(constComplex&
doubler=real*c.real-imag*c.imag;
doublei=real*c.imag+imag*c.real;
operator/(constComplex&
doublet=pow(c.imag,2)+pow(c.real,2);
doubler=real*c.real+imag*c.imag;
doublei=imag*c.real-real*c.imag;
returnComplex(r/t,i/t);
voidComplex:
print()const{
('
real<
'
imag<
)'
Complexa(3,2),b(0,3),c;
c.print();
c=a-b;
c=a*b;
c=a/b;
习题五
7、有以下程序,请完成下面的工作:
阅读程序,写出运行时输出的结果。
classA{
A(){a=0;
b=0;
A(inti){a=i;
A(inti,intj){a=i;
b=j;
a="
a<
b="
b;
inta;
intb;
classB:
publicA
B(){c=0;
B(inti):
A(i){c=0;
B(inti,intj):
A(i,j){c=0;
B(inti,intj,intk):
A(i,j){c=k;
voiddisplay1()
display();
cout<
c="
intc;
Bb1;
Bb2
(1);
Bb3(1,3);
Bb4(1,3,5);
b1.display1();
b2.display1();
b3.display1();
b4.display1();
a=0b=0c=0
a=1b=0c=0
a=1b=3c=0
a=1b=3c=5
8、有以下程序,请完成下面的工作:
A(){cout<
constrctingA"
~A(){cout<
destrctingA"
B(){cout<
constrctingB"
~B(){cout<
destrctingB"
classC:
publicB
C(){cout<
constrctingC"
~C(){cout<
destrctingC"
Cc1;
constrctingA
constrctingB
constrctingC
destrctingC
destrctingB
destrctingA
习题六
4、写一个程序,定义抽象基类Shape,由它派生出3个派生类,Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三只的面积,3个图形的数据在定义对象时给出。
代码如下:
///基类Shape
classShape
voidvirtualprintArea()=0;
//纯虚函数
//派生类Circle
classCircle:
publicShape
Circle(doubler=0):
radius(r){}//构造函数
voidprintArea(){cout<
3.14159*radius*radius<
doubleradius;
//数据成员,表示半径
//派生类Rectangle
classRectangle:
Rectangle(doublew,doubleh):
width(w),height(h){}//构造函数
width*height<
doublewidth;
//数据成员,表示宽
doubleheight;
//数据成员,表示长
//派生类Triangle
classTriangle:
Triangle(doublew,doubleh):
width(w),height(h){}//构造函数
width*height*0.5<
//数据成员,表示底
//数据成员,表示高
//主函数
Shape*s;
Circlecircle(1.0);
Rectanglerectangle(1.0,1.0);
Triangletriangle(1.0,1.0);
s=&
circle;
s->
printArea();
rectangle;
triangle;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 作业 参考答案