农林大学计算机与信息学院实验报告.docx

上传人:b****0 文档编号:17552211 上传时间:2023-07-26 格式:DOCX 页数:15 大小:18.95KB
下载 相关 举报
农林大学计算机与信息学院实验报告.docx_第1页
第1页 / 共15页
农林大学计算机与信息学院实验报告.docx_第2页
第2页 / 共15页
农林大学计算机与信息学院实验报告.docx_第3页
第3页 / 共15页
农林大学计算机与信息学院实验报告.docx_第4页
第4页 / 共15页
农林大学计算机与信息学院实验报告.docx_第5页
第5页 / 共15页
农林大学计算机与信息学院实验报告.docx_第6页
第6页 / 共15页
农林大学计算机与信息学院实验报告.docx_第7页
第7页 / 共15页
农林大学计算机与信息学院实验报告.docx_第8页
第8页 / 共15页
农林大学计算机与信息学院实验报告.docx_第9页
第9页 / 共15页
农林大学计算机与信息学院实验报告.docx_第10页
第10页 / 共15页
农林大学计算机与信息学院实验报告.docx_第11页
第11页 / 共15页
农林大学计算机与信息学院实验报告.docx_第12页
第12页 / 共15页
农林大学计算机与信息学院实验报告.docx_第13页
第13页 / 共15页
农林大学计算机与信息学院实验报告.docx_第14页
第14页 / 共15页
农林大学计算机与信息学院实验报告.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

农林大学计算机与信息学院实验报告.docx

《农林大学计算机与信息学院实验报告.docx》由会员分享,可在线阅读,更多相关《农林大学计算机与信息学院实验报告.docx(15页珍藏版)》请在冰点文库上搜索。

农林大学计算机与信息学院实验报告.docx

农林大学计算机与信息学院实验报告

福建农林大学计算机与信息学院实验报告

系(教研室):

计算机系专业:

计算机科学与技术年级:

08级实验课程:

面向对象程序设计

姓名:

郑彬学号:

实验室号:

_513_计算机号:

2

实验时间:

9月29日、10月13日指导教师签字:

成绩:

实验二类与对象(验证性)

一、实验目的和要求

1.掌握类、类的数据成员、类的成员函数的定义方式,理解类成员的访问控制方式。

2.掌握对象的定义和操作对象的方法。

3.掌握构造函数和析构函数的概念,掌握几种特殊构造函数。

4.理解对象数组、对象指针的概念并能正确应用。

5.理解类的组合关系(对象成员)。

6.理解this、const、new/delete等关键字的用法并能够正确应用。

7.掌握静态成员的基本使用方法。

8.掌握友元的使用方法,进一步理解其概念和作用。

二、实验内容和原理

1.下面程序sy3_1.cpp中用ERROR标明的语句有错,在不删除和增加代码行的情况下,改正错误语句,使其正确与运行。

//sy3_1.cpp

#include

usingnamespacestd;

classAa

{

public:

Aa(inti=0){a=i;cout<<"Constructor"<

~Aa(){cout<<"Destructor"<

voidprint(){cout<

private:

inta;

};

intmain()

{

Aaa1

(1),a2

(2);

a1.print();

cout<

return0;

}

2.调试下列程序。

//sy3_2.cpp

#include

usingnamespacestd;

classTPoint

{

public:

TPoint(intx,inty){X=x;Y=y;}

TPoint(TPoint&p);

~TPoint(){cout<<"Destructoriscalled\n";}

intgetx(){returnX;}

intgety(){returnY;}

private:

intX,Y;

};

TPoint:

:

TPoint(TPoint&p)

{

X=p.X;

Y=p.Y;

cout<<"Copy-initializentionConstructoriscalled\n";

}

intmain()

{

TPointp1(4,9);

TPointp2(p1);

TPointp3=p2;

cout<<"p3=("<

return0;

}

在该程序中,将TPoint类的带有两个参数的构造函数进行修改,在函数体内增添下述语句:

cout<<"Contructoriscalled.\n"

(1)写出程序的输出结果,并解释输出结果。

(2)按下列要求进行调试;

在主函数体内,添加下列说明语句:

Tpointp4,p5

(2);

调试程序会出现什么现象?

为什么?

如何解决?

(提示:

对已有的构造函数进行适当修改)结合运行结果分析如何使用不同的构造函数创建不同的对象。

3.对教材中Li3_11.cpp的主函数做如下修改:

(1)将Heapclass*pa1,*pa2改为Heapclass*pa1,*pa2,*p3;

(2)在语句pa=newheapclass;后增加语句pa3=newHeapclass(5);

(3)将语句if(!

pa1||!

pa2)改为if(!

pa1||!

pa2||!

pa3);

(4)在语句deletepa2;后增加语句deletepa3;

写出程序的输出结果,并解释输出结果。

4.请定义一个矩形类(Rectangle),私有数据成员为矩形的长度(len)和宽度(wid),无参构造函数置len和wid为0,有参构造函数置len和wid为对应形参的值,另外还包括求矩形周长,求矩形面积,取矩形长度和宽度,修改矩形长度和宽度为对应形参的值,输出矩形尺寸等公有成员函数。

要求输出矩形尺寸的格式为”length:

长度,width:

宽度”。

(sy3_3.cpp)

5调试下列程序,写出输出结果,并分析输出结果。

//sy4_1.cpp

#include

usingnamespacestd;

classMy

{

public:

My(intaa)

{

A=aa;

B-=aa;

}

staticvoidfun(Mym);

private:

intA;

staticintB;

};

voidMy:

:

fun(Mym)

{

cout<<"A="<

cout<<"B="<

}

intMy:

:

B=100;

intmain()

{

MyP(6),Q(8);

My:

:

fun(P);

Q.fun(Q);

return0;

}

6.分析并调试程序,完成下列问题。

//sy4_2.cpp

#include

#include

usingnamespacestd;

classMy

{

public:

My(doublei=0){x=y=i;}

My(doublei,doublej){x=i;y=j;}

My(My&m){x=m.x;y=m.y;}

frienddoubledist(My&a,My&b);

private:

doublex,y;

};

doubledist(My&a,My&b)

{

doubledx=a.x-b.x;

doubledy=a.y-b.y;

returnsqrt(dx*dx+dy*dy);

}

intmain()

{

Mym1,m2(15),m3(13,14);

Mym4(m3);

cout<<"Thedistancel:

"<

cout<<"Thedistance2:

"<

cout<<"Thedistance3:

"<

cout<<"Thedistance4:

"<

return0;

}

(1)指出所有的构造函数,它们在本程序中分别起什么作用?

(2)指出设置默认参数的构造函数。

(3)指出友元函数,将友元函数放到私有部分,观察结果是否有变化。

(4)写出输出结果,并分析输出结果。

7.定义一个Student类,在该类的定义中包含一个数据成员score(分数),两个静态数据成员total(总分)和学生人数count;成员函数scoretotalcount(floats)用于设置分数,求总分和累计学生人数;静态成员函数sun()用于返回总分;静态成员函数average()用于求平均值。

在main函数中,输入某班同学的成绩,并调用上述函数求全班学生的总分和平均分(sy4_3)

8.声明Book和Ruler两个类,二者都有weight属性,定义二者的一个友元函数totalWeight(),计算两者的重量和。

(sy4_4.cpp)

三、实验环境

微机及VisualC++6.0。

四、算法描述及实验步骤

1.将cout<

2.在该程序中,将TPoint类的带有两个参数的构造函数进行修改,在函数体内增添下述语句:

cout<<”Contructoriscalled.\n”

(1)写出程序的输出结果,并解释输出结果。

(2)按下列要求进行调试;

在主函数体内,添加下列说明语句:

Tpointp4,p5

(2);

观察调试时出现的现象,解释原因并解决

3.写出修改后的程序的结果,并解释输出结果

修改后的程序:

#include

usingnamespacestd;

classHeapclass

{

public:

Heapclass(intx);

Heapclass();

~Heapclass();

private:

inti;

};

Heapclass:

:

Heapclass(intx)

{

i=x;

cout<<"Contstructoriscalled."<

}

Heapclass:

:

Heapclass()

{

cout<<"DefaultContstructoriscalled."<

}

Heapclass:

:

~Heapclass()

{

cout<<"Defaultiscalled."<

}

intmain()

{

Heapclass*pa1,*pa2,*pa3;

pa1=newHeapclass(4);

pa2=newHeapclass;

pa3=newHeapclass(5);

if(!

pa1||!

pa2||!

pa3)

{

cout<<"OutofMemory!

"<

return0;

}

cout<<"Exitmain"<

deletepa1;

deletepa2;

deletepa3;

return0;

}

4#include

usingnamespacestd;

classRectangle

{

public:

Rectangle(){len=0;wid=0;}

Rectangle(doubleLen,doubleWid){len=Len;wid=Wid;}

doubleCircumference(){return2*(len+wid);}

doubleArea(){returnlen*wid;}

doublegetl(){returnlen;}

doublegetw(){returnwid;}

voidcharge(doublea,doubleb){len=a;wid=b;}

print(){cout<<"length:

"<

"<

private:

intlen,wid;

};

intmain()

{

Rectanglep1;

Rectanglep2(4.0,5.0);

cout<<"p1的矩形尺寸:

";

p1.print();

cout<<"p2的矩形尺寸:

";

p2.print();

cout<<"p2周长:

"<

cout<<"p2面积:

"<

cout<<"p2的长度:

"<

cout<<"p2的宽度:

"<

p2.charge(5.0,6.0);

cout<<"修改后的矩形的尺寸:

";

p2.print();

return0;

}

5.调试程序所有sy4_1,写出输出结果,分析输出结果。

6.分析调试sy4_2,回答sy4_2的问题。

7.

程序如下:

//sy4_3

#include

usingnamespacestd;

classstudent

{

public:

voidscoretotalcount(floats);

staticfloatsum();

staticfloataverage();

private:

floatscore;

staticfloattotal;

staticintcount;

};

floatstudent:

:

total=0;

intstudent:

:

count=0;

voidstudent:

:

scoretotalcount(floats)

{

score=s;

total+=score;

count++;

}

floatstudent:

:

sum(){returntotal;}

floatstudent:

:

average(){returntotal/count;}

intmain()

{

floats;

intn;

studenta[10];

cout<<"输入学生的个数(10个以内):

";

cin>>n;

cout<<"输入学生成绩:

";

for(inti(0);i

{

cin>>s;

a[i].scoretotalcount(s);

}

cout<<"班级总分为:

";

cout<

:

sum()<

cout<<"班级平均分为:

";

cout<

:

average()<

return0;

}

8.程序如下:

//sy4_4

#include

usingnamespacestd;

classRuler;

classBook

{

public:

Book(inti=0){weight=i;}

friendfloattotalWeight(Book&m,Ruler&n);

private:

floatweight;

};

classRuler

{

public:

Ruler(intj=0){weight=j;}

friendfloattotalWeight(Book&m,Ruler&n);

private:

floatweight;

};

floattotalWeight(Book&m,Ruler&n)

{returnm.weight+n.weight;}

intmain()

{inti,j;

cout<<"Bookweight:

";

cin>>i;

cout<<"Rulerweight:

";

cin>>j;

BookB(i);

RulerR(j);

cout<<"totalweight"<

return0;

五、调试过程及实验结果

1.应将cout<

试验结果为:

2.

(1)在TPoint类的带有两个参数的构造函数中添加cout<<”Contructoriscalled.\n”

试验结果:

(2)在主函数体内,添加Tpointp4,p5

(2);

调试过程:

出错原因:

因为在类中没有定义不带参数和带一个参数的构造函数

解决方法:

可以将带两个参数的结构函数改为缺省的构造函数,即可以将TPoint(intx,inty)改为TPoint(intx=0,inty=0)

输出结果:

在运行的过程中TPointp1(4,9);TPointp4,p5

(2);调用了构造函数,而TPointp2(p1);TPointp3=p2;使用了拷贝构造函数。

3.实验结果:

用3个指针*p1,*p2,*p3指向三个新创建的对象,并调用了带一个和不带构造参数的构造函数进行对对象进行初始化,故输出了前三个语句。

实验结束后,调用了析构函数,产生了后三个语句。

4.实验结果:

调试过程:

经检查charge(5.0,6.0);错误应将其改为p2.charge(5.0,6.0);

5.实验结果:

创建对象P时,调用构造函数对其初始化得到,A=6,B=B-A=100-6=94,

再创建对象Q时,调用构造函数对其初始化得到,A=8,B=B-A=94-8=86,

最后调用了静态成员函数staticvoidfun(),且因为B是静态数据成员,故输出上面的结果。

6.验结果:

(1)构造函数My(doublei=0)用来对m1,m2进行初始化,My(doublei,doublej)对m3进行初始化,拷贝构造函数My(My&m)用来对m4进行初始化。

(2)My(doublei=0)为带默认参数的构造函数。

(3)dist()为友元函数,将其放到私有部分,编译仍是正确的的,因为友元函数声明时仍与普通函数一致的,所以编译时不会出错。

7.调试过程:

在类定义完时,未加分号。

实验结果:

8.调试过程:

调试未出现错误。

实验结果:

六、总结

(1)只有类中的函数才能访问类中的私有成员。

(2)在对象创建时,先用构造函数对其进行初始化,在程序结束后用析构函数释放由构造函数分配的内存,而且析构函数的执行顺序与构造函数执行的顺序刚好相反。

(3)一般对象:

在对象的创建时进行初始化,可以用构造函数或者用拷贝构造函数进行初始化

堆对象:

用new进行分配空间,在调用构造函数进行初始化。

(4)掌握了静态变量和静态函数的基本使用和友元函数的使用方法。

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

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2