面向对象程序设计作业参考答案Word文档格式.docx

上传人:b****5 文档编号:17429378 上传时间:2022-12-01 格式:DOCX 页数:16 大小:19.18KB
下载 相关 举报
面向对象程序设计作业参考答案Word文档格式.docx_第1页
第1页 / 共16页
面向对象程序设计作业参考答案Word文档格式.docx_第2页
第2页 / 共16页
面向对象程序设计作业参考答案Word文档格式.docx_第3页
第3页 / 共16页
面向对象程序设计作业参考答案Word文档格式.docx_第4页
第4页 / 共16页
面向对象程序设计作业参考答案Word文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

面向对象程序设计作业参考答案Word文档格式.docx

《面向对象程序设计作业参考答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计作业参考答案Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

面向对象程序设计作业参考答案Word文档格式.docx

8、在你所用的C++系统上,输入以下程序,进行编译,观察编译情况,如果有错误,请修改程序,在进行编译,直到没有错误,然后进行连接和运行,分析运行结果。

修改后的程序如下:

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;

();

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;

习题三

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;

输出结果如下:

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,;

(101,;

101

7、将第6题得程序分别做如下修改,分析所修改部分的函数以及编译和运行的情况。

(1)将main函数第2行改为

constStudentstud(101,;

有错误,常对象只能调用常成员函数,而display和change函数都不是常成员函数。

(2)在

(1)的基础上修改程序,是只能正常运行,用change函数修改数据成员num和score的值。

首先将change和display成员函数修改为常成员函数,然后将数据成员num和score修改为可变类型(在num和score的数据类型前加mutable)。

(3)将main函数改为

Student*p=&

stud;

p->

change(101,;

其他部分仍同第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+;

doublei=imag+;

returnComplex(r,i);

operator-(constComplex&

doubler=;

doublei=;

operator*(constComplex&

doubler=real*-imag*;

doublei=real*+imag*;

operator/(constComplex&

doublet=pow,2)+pow,2);

doubler=real*+imag*;

doublei=imag*-real*;

returnComplex(r/t,i/t);

voidComplex:

print()const{

('

real<

'

imag<

)'

Complexa(3,2),b(0,3),c;

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);

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<

*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*<

//数据成员,表示底

//数据成员,表示高

//主函数

Shape*s;

Circlecircle;

Rectanglerectangle,;

Triangletriangle,;

s=&

circle;

s->

printArea();

rectangle;

triangle;

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 生物学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1