C++ 实验二 类与对象(附答案)(16页).doc





《C++ 实验二 类与对象(附答案)(16页).doc》由会员分享,可在线阅读,更多相关《C++ 实验二 类与对象(附答案)(16页).doc(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-C+ 实验二 类与对象(附答案)-第 16 页实验二 类与对象实验目的和要求 1掌握类、类的数据成员、类的成员函数的定义方式。 2理解类成员的访问控制方式。 3掌握对象的定义和操作对象的方法。 4理解构造函数和析构函数的定义与执行过程。 5掌握重载构造函数的方法。6了解拷贝构造函数的定义方法。实验内容1下面程序中有错,在不删除和增加代码行的情况下,改正错误语句,使其正确运行。#includeclass Aapublic:Aa(int i=0)a=i; coutConstructor aendl;Aa()coutDestructor aendl;void print()coutaendl;pr
2、ivate:int a;int main()Aa al(1),a2(2);al.print();couta2.aendl; return 0;2检查下面的程序,找出其中的错误,并改正。然后上机调试,使程序能正常运行。(1)#includeclass Datevoid set_date();void show_date();int year;int month;int day;Date d;int main()set_date();show_date();void set_date()cind.year;cind.month;cind.day;void show_date()coutd.year
3、/d.month/d.dayendl;(2)#includeclass Apublic:void A(int i=0)m=i;void show()coutmendl;void A()private:int m;int main()A a(5);a.m+=10;a.show();return 0;(3)#includeclass Xprivate:int a=0;int &b;void setA(int i)a=i;X(int i)a=i;public:int X()a=b=0;X(int i,int j)a=i;b=j;void setC(int k)c=c+k;void main()X x
4、1;X x2(2);X x3(1,2);x1.setA(3);3调试下列程序。#includeclass TPointprivate:int X,Y;public:TPoint(int x,int y)X=x;Y=y;coutConstructor is calledendl;TPoint(TPoint &p);TPoint()coutDestructor is calledendl;int getx()return X;int gety()return Y;TPoint:TPoint(TPoint &p)X=p.X;Y=p.Y;coutCopy-initialization Construc
5、tor is calledendl;void main()TPoint p1(4,9);TPoint p2(p1);TPoint p3 = p2;coutp3=(p3.getx(),p3.gety()endl;(1)写出程序的输出结果,并解释输出结果。(2)按下列要求进行调试:在主函数体内,添加下列说明语句:TPoint p4,p5(2); 调试程序会出现什么现象?为什么?如何解决?(提示:对已有的构造函数进行适当修改)结合运行结果分析如何使用不同的构造函数创建不同的对象。(3)在主函数内使用new创建不同参数动态两个动态对象,输出其坐标,并用delete删除之。运行程序,分析运行结果。(4)
6、在程序中定义个全局对象,在主函数最前添加语句:coutEnter mainendl;运行程序,分析运行结果。4完善程序,并写出运行结果根据程序要求,完善程序后输入源程序,编译连接,并写出运行结果。如果某个自然数除了1和它本身外还有其他因子,则这个自然数就是合数(非素数)。试定义一个类NUM,从3开始向上试探找出n个连续的自然数,且它们都是合数。当找到第一组连续的n个合数后,即停止查找。具体要求如下:(1)私有成员int n : 存放满足条件的连续自然数的个数。int *p: 根据n的值申请一个动态数组用来存放求出的满足条件的n个自然数。(2)公有成员函数NUM(int n1): 构造函数,用n
7、1初始化n,根据n的值申请动态数组空间,使p指向该动态数组空间。int yes(int x): 判断x是否为合数。如果是,返回1,否则返回0。void fun(): 从3开始向上试探找出n个连续的自然数,且它们都是合数,并依次存入动态数组。void print(): 输出满足条件的n个合数。NUM(): 析构函数,释放动态数组所占用的存储空间。(3)在主函数中定义一个NUM类的对象num,求出10个连续的合数。然后通过对象num调用成员函数求出10个连续的合数,并输出计算结果。#include class NUM/定义数据类NUMprivate:int n;int *p;public:NUM(
8、int n1)n=n1;p= ;/动态分配存放连续合数的存储空间int yes(int x)for(int i=2;i=x/2;i+)if (x%i=0)return 1;return 0;void fun(void)int j;for(int i=3;1;i+)j=0;while( &jn)pj=i;j+;i+;if(j=n)break;void print(void)cout找到的n个连续合数为:endl;for(int i=0;in;i+)coutpi ;coutendl;NUM() ;/释放在构造函数中申请的存储空间void main()coutn;NUM num(n); ;/寻找连续
9、的合数,并存入动态申请的存储空间中 ;/输出寻找到的合数5请定义一个矩形类(Rectangle),私有数据成员为矩形的长度( len)和宽度(wid),缺省构造函数置len和wid为0,有参构造函数置len和wid为对应形参的值,另外还包括求矩形周长、求矩形面积、取矩形长度和宽度、修改矩形长度和宽度为对应形参的值、输出矩形尺寸等公有成员函数。要求输出矩形尺寸的格式为“length:长度,width:宽度”。编写主函数对定义的类进行测试。6声明一个时间类,时间类中有3个私有数据成员(Hour,Minute,Second)和两个公有成员函数(SetTime和PrintTime)。SetTime根据
10、传递的3个参数为对象设置时间;PrintTime负责将对象表示的时间显示输出,输出格式为“Hour:Minute:Second”。(1)在主函数中,建立一个时间类的对象,设置时间为9点20分30秒并显示该时间。(2)使用构造函数代替上面的SetTime成员函数,并在主函数中使用构造函数设置时间为10点40分50秒,并显示该时间。(3)重载时间类的构造函数(不带参数)使小时、分、秒均为0。(4)在时间类的析构函数中输出Good bye!”(5)定义拷贝构造函数并调用。7下面是一个整型链表类intList的声明,请给出该类所有数据成员的类外定义,并在主函数中测试该类。class intListpr
11、otected:struct Nodeint data;Node *next;Node *L;public:intList();/构造函数intList();/析构函数bool Insert(int i,int elem);bool Remove(int i,int &elem);/删除链表的第i个位置的元素,删除成功返回true,失败返回falseint Find(int elem);/在链表中查找值为elem的元素,找到返回该元素在链表中的位置,否则返回0int Length();/返回链表长度(元素个数)void PrintList();/输出链表参考答案(非权威,仅仅是我自己的理解,如
12、有错误,欢迎批评指正!)第一题:#includeclass Aapublic:Aa(int i=0)a=i; coutConstructor aendl;Aa()coutDestructor aendl;void print()coutaendl;private:int a;int main()Aa al(1),a2(2);al.print();a2.print();return 0;第二题(1)#includeclass Datepublic:void set_date();void show_date();private:int year;int month;int day;Date d;
13、int main()d.set_date();d.show_date();return 0;void Date:set_date()cinyear;cinmonth;cinday;void Date:show_date()coutyear/month/dayendl;(2)#includeclass Apublic:A(int i=0)m=i;void show()coutmendl;A()friend void add(A &);private: int m;void add(A &a)a.m+=10;int main()A a(5);add(a);a.show();return 0;(3)
14、#includeclass Xprivate:int a,b,c;public:X(int i)a=i;X()a=b=0;X(int i,int j)a=i;b=j;void setC(int k)c=c+k;void setA(int i)a=i;void main()X x1;X x2(2);X x3(1,2);x1.setA(3);第三题(1)void main()TPoint p1(4,9);/调用构造函数初始化p1TPoint p2(p1);/显示调用拷贝构造函数初始化p2TPoint p3 = p2;/对象之间的赋值,由于之前没有定义p3,因此用另一个同类的对象给其赋值时,会调用拷
15、贝构造函数。coutp3=(p3.getx(),p3.gety()endl;/输出p3在赋值后的x和y(2)答:调试程序会程序错误,原因是对于无输入的对象和只要一个输入值的对象没有相应的构造函数,要解决也挺简单,就是在说明部分加上相应的构造函数就可以了。修改后的程序如下:#includeclass TPointprivate:int X,Y;public:TPoint()X=Y=0;coutA Constructor is calledendl;TPoint(int i)X=i;Y=0;coutB Constructor is calledendl;TPoint(int x,int y)X=x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 实验二 类与对象附答案16页 实验 对象 答案 16

限制150内