《农林大学计算机与信息学院实验报告》由会员分享,可在线阅读,更多相关《农林大学计算机与信息学院实验报告(17页珍藏版)》请在金锄头文库上搜索。
1、福建农林大学计算机与信息学院实验报告系(教研室):计算机系专业:计算机科学与技术年级:08级 实验课程:面向对象程序设计姓名:郑彬学号:081150002 实验室号:_ 513 _计算机号:2实验时间:9月29日10月13日指导教师签字:成绩:实验二 类与对象(验证性)一、实验目的和要求1 掌握类、类的数据成员、类的成员函数的定义方式,理解类成员的访问控制方式。2.掌握对象的定义和操作对象的方法。3 掌握构造函数和析构函数的概念,掌握几种特殊构造函数。4理解对象数组、对象指针的概念并能正确应用。5. 理解类的组合关系(对象成员)。6. 理解this、con st、n ew/delete 等关键
2、字的用法并能够正确应用。7掌握静态成员的基本使用方法。&掌握友元的使用方法,进一步理解其概念和作用。二、实验内容和原理1.下面程序sy3_1.cpp中用ERRO标明的语句有错,在不删除和增加代码行的情 况下,改正错误语句,使其正确与运行。sy3_1.cpp#in cludeusing n amespace std;class Aapublic:Aa(i nt i=0) a=i;coutC on structorae ndl;Aa()coutvDestructorvvavve ndl;void prin t()coutae ndl;private:int a;int main()Aa a1(1)
3、,a2(2);al.pri nt();coutva2.avve ndl; /ERRORreturn 0;2. 调试下列程序。sy3_2.cpp#in cludeusing n amespace std;class TPoi ntpublic:TPoi nt(i nt x,i nt y)X=x;Y=y;TPoi nt(TPoi nt & p);TPoi nt()coutDestructor is calledn;int getx()return X;int gety()return Y;private:int X,Y;TPoi nt:TPoi nt(TPoi nt &p)X=p.X;Y=p.Y;
4、coutCopy-i nitialize nti on Con structor is calledn;int main()TPoi nt p1(4,9);TPoi nt p2(p1);TPoi nt p3=p2;coutvp3=(vvp3.getx()vv, vvp3.gety()vv)n;return 0;在该程序中,将TPoint类的带有两个参数的构造函数进行修改,在函数体内增添下述语句:coutC on tructor is called. n(1) 写出程序的输出结果,并解释输出结果。(2) 按下列要求进行调试;在主函数体内,添加下列说明语句:Tpoi nt p4,p5 (2);调试
5、程序会出现什么现象?为什么?如何解决?(提示:对已有的构造函数进行 适当修改)结合运行结果分析如何使用不同的构造函数创建不同的对象。3. 对教材中Li3_11.cpp的主函数做如下修改:(1) 将 Heapclass *pa1,*pa2 改为 Heapclass *pa1,*pa2 ,*p3;(2) 在语句 pa二new heapclass;后增加语句 pa3= new Heapclass(5);(3) 将语句 if(!pa1|!pa2) 改为 if(!pa1|!pa2|!pa3);(4) 在语句delete pa2 ;后增加语句delete pa3 ;写出程序的输出结果,并解释输出结果。4
6、.请定义一个矩形类(Rectangle ),私有数据成员为矩形的长度(len )和宽度(wid),无参构造函数置len和wid为0,有参构造函数置len和wid为对应形 参的值,另外还包括求矩形周长,求矩形面积,取矩形长度和宽度,修改矩形长 度和宽度为对应形参的值,输出矩形尺寸等公有成员函数。要求输出矩形尺寸的 格式为” length:长度,width:宽度”。(sy3_3.cpp)5调试下列程序,写出输出结果,并分析输出结果。sy4_1.cpp#in cludeusing n amespace std;class Mypublic:My(i nt aa)A=aa;B-=aa;static v
7、oid fun (My m);private:int A; static int B;void My:fun(My m)coutvA=vvm.Avve ndl; coutvB=vvm.Bvve ndl;int My:B=100;int main()My P( 6),Q(8);My:fu n( P);Q.fu n(Q); return 0;6. 分析并调试程序,完成下列问题sy4_2.cpp#in clude #in cludeusing n amespace std;class Mypublic:My(double i=O)x=y=i;My(double i,double j)x=i;y=j;
8、My(My&m) x=m.x;y=m.y; friend double dist(M y&a,M y&b);private:double x,y;double dist(M y&a,M y&b)double dx=a.x-b.x;double dy=a.y-b.y;retur n sqrt(dx*dx+dy*dy);int main()My m1,m2(15),m3(13,14);My m4(m3);coutThe dista ncel:vdist(m1,m3)ve ndl;coutThe dista nce2:vdist(m2,m3)ve ndl;coutThe dista nce3:vdi
9、st(m3,m4)ve ndl;coutThe dista nce4:vdist(m1,m2)ve ndl;return 0;(1) 指出所有的构造函数,它们在本程序中分别起什么作用?(2) 指出设置默认参数的构造函数。(3) 指出友元函数,将友元函数放到私有部分,观察结果是否有变化。(4) 写出输出结果,并分析输出结果。7. 定义一个Student类,在该类的定义中包含一个数据成员score (分数),两个静态数据成员total (总分)和学生人数count ;成员函数scoretotalcount(floats)用于设置分数,求总分和累计学生人数;静态成员函数sun ()用于返回总分;静态
10、成员函数average。用于求平均值。在main函数中,输入某班同学的成绩,并调用上述函数求全班学生的总分和平均 分(sy4_3)8. 声明Book和Ruler两个类,二者都有 weight属性,定义二者的一个友元函数 totalWeight (),计算两者的重量和。(sy4_4.cpp)三、实验环境微机及 Visual C+6.0。四、算法描述及实验步骤1. 将couta2.aendl;改为a2. .print();然后进行调试运行。2. 在该程序中,将TPoint类的带有两个参数的构造函数进行修改,在函数体内增添下述语句:cout ” Contructor is called.n”(1)
11、写出程序的输出结果,并解释输出结果。(2) 按下列要求进行调试; 在主函数体内,添加下列说明语句:Tpoi nt p4,p5 (2);观察调试时出现的现象,解释原因并解决3. 写出修改后的程序的结果,并解释输出结果 修改后的程序:#in cludeusing n amespace std;class Heapclasspublic:Heapclass(i nt x);Heapclass();Heapclass();private:int i;Heapclass:Heapclass(i nt x)i=x;coutvC on tstructor is called.vive ndl;Heapcla
12、ss:Heapclass()coutDefault Con tstructor is called.e ndl;Heapclass:Heapclass() coutDefault is called.e ndl;int main()Heapclass *pa1,*pa2,*pa3;pa1= new Heapclass(4);pa2=new Heapclass;pa3=new Heapclass(5);if(!pa1|!pa2|!pa3)coutOut of Memory!e ndl;return 0;coutExit main e ndl;delete pa1;delete pa2;delet
13、e pa3;return 0;4#in cludeusing n amespace std;class Recta nglepublic:Recta ngle()le n=0;wid=0;Recta ngle(double Len, double Wid) le n=Le n; wid=Wid; double Circumfere nce() return 2*(le n+wid); double Area() return len *wid; double getl()return len;double getw()return wid;void charge(double a,double
14、 b) le n=a;wid=b; prin t()coutle ngth:le nvwidth:vwid; private: in t le n,wid;int main()Recta ngle p1;Recta ngle p2(4.0,5.0);coutp1的矩形尺寸:;p1.pri nt();coutp2的矩形尺寸:;p2.pri nt();coutp2 周长:p2. Circumference()endl; coutp2 面积:p2. Area()endl;coutp2 的长度:p2. getl()endl; coutp2 的宽度:p2. getw()endl; p2.charge(5.0,6.0);coutvv修改后的矩形的尺寸:;