C++ 实验二 类与对象(附答案)_第1页
C++ 实验二 类与对象(附答案)_第2页
C++ 实验二 类与对象(附答案)_第3页
C++ 实验二 类与对象(附答案)_第4页
C++ 实验二 类与对象(附答案)_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验二 类与对象实验目的和要求 1掌握类、类的数据成员、类的成员函数的定义方式。 2理解类成员的访问控制方式。 3掌握对象的定义和操作对象的方法。 4理解构造函数和析构函数的定义与执行过程。 5掌握重载构造函数的方法。6了解拷贝构造函数的定义方法。实验内容1下面程序中有错,在不删除和增加代码行的情况下,改正错误语句,使其正确运行。#includeclass Aapublic:Aa(int i=0)a=i; coutConstructor aendl;Aa()coutDestructor aendl;void print()coutaendl;private:int a;int main()Aa

2、 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/d.month/d.dayendl;(2)#i

3、ncludeclass 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 x1;X x2(2);X x3(1,2);x1.s

4、etA(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 Constructor is calledendl;void m

5、ain()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)在程序中定义个全局对象,在主函数最前添加语句:c

6、outEnter mainendl;运行程序,分析运行结果。4完善程序,并写出运行结果根据程序要求,完善程序后输入源程序,编译连接,并写出运行结果。如果某个自然数除了1和它本身外还有其他因子,则这个自然数就是合数(非素数)。试定义一个类NUM,从3开始向上试探找出n个连续的自然数,且它们都是合数。当找到第一组连续的n个合数后,即停止查找。具体要求如下:(1)私有成员int n : 存放满足条件的连续自然数的个数。int *p: 根据n的值申请一个动态数组用来存放求出的满足条件的n个自然数。(2)公有成员函数NUM(int n1): 构造函数,用n1初始化n,根据n的值申请动态数组空间,使p指向

7、该动态数组空间。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(int n1)n=n1;p= ;/动态分配存放连

8、续合数的存储空间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根据传递的3个参数为对象设置时间;PrintTim

10、e负责将对象表示的时间显示输出,输出格式为“Hour:Minute:Second”。(1)在主函数中,建立一个时间类的对象,设置时间为9点20分30秒并显示该时间。(2)使用构造函数代替上面的SetTime成员函数,并在主函数中使用构造函数设置时间为10点40分50秒,并显示该时间。(3)重载时间类的构造函数(不带参数)使小时、分、秒均为0。(4)在时间类的析构函数中输出Good bye!”(5)定义拷贝构造函数并调用。7下面是一个整型链表类intList的声明,请给出该类所有数据成员的类外定义,并在主函数中测试该类。class intListprotected:struct Nodeint

11、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();/输出链表;参考答案(非权威,仅仅是我自己的理解,如有错误,欢迎批评指正!)第一题:#inclu

12、declass 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;int main()d.set_date()

13、;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)#includeclass Xprivat

14、e: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,因此用另一个同类的对象给其赋值时,会调用拷贝构造函数。coutp3=(p3.getx

15、(),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;Y=y;coutConstructor

16、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 Constructor is calledendl;void main()TPoint p1(4,9);coutp1=(p1.getx(),p1.gety()endl;TPoint p2(p1);coutp2=(p2.getx(),p2.gety()endl;TPo

17、int p3 = p2;coutp3=(p3.getx(),p3.gety()endl;TPoint p4,p5(2);coutp4=(p4.getx(),p4.gety()endl;coutp5=(p5.getx(),p5.gety()endl;(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

18、;int gety()return Y;TPoint:TPoint(TPoint &p)X=p.X;Y=p.Y;coutCopy-initialization Constructor is calledendl;void main()TPoint *p1=new TPoint(4,9);coutp1=(getx(),gety()endl;delete p1;(4)#includeclass TPointprivate:int X,Y;public:TPoint(int x,int y)X=x;Y=y;coutConstructor is calledendl;TPoint(TPoint &p)

19、;TPoint()coutDestructor is calledendl;int getx()return X;int gety()return Y;void ShowPoint()coutp1=(X,Y)endl;TPoint:TPoint(TPoint &p)X=p.X;Y=p.Y;coutCopy-initialization Constructor is calledendl;void main()coutEnter mainShowPoint();delete p1;第四题:#include class NUM/定义数据类NUMprivate:int n;int *p;public

20、:NUM(int n1)n=n1;p=new intn; /动态分配存放连续合数的存储空间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(yes(i)&jn)pj=i;j+;i+;if(j=n)break;void print(void)cout找到的n个连续合数为:endl;for(int i=0;in;i+)coutpi ;coutendl;NUM()if(p) deletep; /释放在构造函数中申请的存储空间;voi

21、d main()coutn;NUM num(n);num.fun();/寻找连续的合数,并存入动态申请的存储空间中num.print() ;/输出寻找到的合数第五题:#includeclass Rectangleprivate:int len,wid;public:Rectangle()len=wid=0;coutFirst Constructor is calledendl;Rectangle(int i,int w)len=i;wid=w;coutSecond Constructor is calledlen;cinwid;int Get_Perimeter()return 2*(len+

22、wid);int Get_Area()return len*wid;int get_len()return len;int get_wid()return wid;Rectangle()coutDestructor is calledendl;void main()int temp;Rectangle rect,Default(8,9);coutendl;cout默认长度:Default.get_len() , 默认宽度:Default.get_wid()endl;cout矩形的周长为:Default.Get_Perimeter()endl;cout矩形的面积为:Default.Get_Are

23、a()endl;coutendl;couttemp;while(temp=1)cout请输入矩形的长和宽:endl;rect.Set_Rectangle();cout长度:rect.get_len() , 宽度:rect.get_wid()endl;cout矩形的周长为:rect.Get_Perimeter()endl;cout矩形的面积为:rect.Get_Area()endl;coutendl;couttemp;coutendl;第六题:#includeclass Timeprivate:int Hour,Minute,Second;public:Time()Hour=Minute=Sec

24、ond=0;coutFirst Constructor is calledendl;Time(int x,int y,int z)Hour=x;Minute=y;Second=z;coutSecond Constructor is calledendl;Time(Time &p)Hour=p.Hour;Minute=p.Minute;Second=p.Second;coutCopy Constructor is calledHour;cinMinute;cinSecond;void PrintTime()cout时:Hour 分:Minute 秒:Secondendl;Time()coutGo

25、od bye!endl;void main()Time time;Time T(10,40,50);Time copy=T;coutendl构造函数时间为:;T.PrintTime();coutendl拷贝构造函数时间为: ;copy.PrintTime();coutendl;coutendl请输入一个时间(时/分/秒): endlendl;time.SetTime();coutendl你所输入的时间为: ;time.PrintTime();coutendl;第七题:#include using namespace std;class intListprotected: struct Node

26、int data;Node * next;Node * L;public:intList();/构造函数intList(); /析构函数 bool Insert(int i, int elem) ; /向链表的第i个位置插入元素elem,插入成功返回true,失败返回false bool Remove(int i, int &elem) ;/删除链表的第i个位置的元素elem,删除成功返回true,失败返回falseint Find(int elem); /查找值为elem的元素,返回该元素在链表的位置int Length() ;/返回链表长度void PrintList();/输出链表;in

27、tList:intList()/构造函数 L=new Node; L-next=NULL; coutConstructor is calledendlnext != NULL ) q=p-next;delete p;p=q;delete p;L=NULL;coutendlGood bye!endl;bool intList:Insert(int i,int elem)/向链表的第i个位置插入元素elem,插入成功返回true,失败返回false Node *p,*s;int j;p= L; j=0;while (p!=NULL ) & (jnext; j+; if (p!=NULL )& (j=i-1) s=new Node;s-data=elem;s-next=p-next;p-next=s;return true;else return false;bool intList:Remove(int i,int &elem)/删除链表的第i个位置的元素elem,删除成功返回true,失败

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论