


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验二 类与对象实验目的和要求1掌握类、类的数据成员、类的成员函数的定义方式。2理解类成员的访问控制方式。3掌握对象的定义和操作对象的方法。4理解构造函数和析构函数的定义与执行过程。5掌握重载构造函数的方法。 6了解拷贝构造函数的定义方法。实验容1下面程序中有错,在不删除和增加代码行的情况下,改正错误语句,使其正确运行。#include<iostream.h>class Aapublic:Aa(int i=0)a=i;cout<<"Constructor "<<a<<endl;Aa()cout<<"Des
2、tructor "<<a<<endl;void print()cout<<a<<endl;private:int a;int main()Aa al(1),a2(2);al.print();cout<<a2.a<<endl;return 0;2检查下面的程序,找出其中的错误,并改正。然后上机调试,使程序能正常运行。(1)#include<iostream.h>class Datevoid set_date();void show_date();int year;int month;int day;Da
3、te d;int main()set_date(); show_date();void set_date() cin>>d.year; cin>>d.month; cin>>d.day;void show_date() cout<<d.year<<'/'<<d.month<<'/'<<d.day<<endl;(2)#include<iostream.h>class Apublic:void A(int i=0)m=i;void show() c
4、out<<m<<endl;void A()private:int m;int main()A a(5); a.m+=10; a.show(); return 0;(3) #include<iostream.h> class 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.setA(3);
5、3调试下列程序。#include<iostream.h>class TPointprivate:int X,Y;public:TPoint(int x,int y)X=x;Y=y;cout<<"Constructor is called"<<endl;TPoint(TPoint &p);TPoint() cout<<"Destructor is called"<<endl;int getx() return X; int gety() return Y; ;TPoint:TPoint(T
6、Point &p)X=p.X;Y=p.Y;cout<<"Copy-initialization Constructor is called"<<endl;void main()TPoint p1(4,9);TPoint p2(p1);TPoint p3 = p2; cout<<"p3=("<<p3.getx()<<","<<p3.gety()<<")"<<endl;(1) 写出程序的输出结果,并解释输出结果。(2
7、) 按下列要求进行调试: 在主函数体,添加下列说明语句:TPoint p4,p5(2);调试程序会出现什么现象?为什么?如何解决? (提示: 对已有的构造函数进行适当修 改)结合运行结果分析如何使用不同的构造函数创建不同的对象。( 3)在主函数使用 new 创建不同参数动态两个动态对象,输出其坐标,并用 delete 删 除之。运行程序,分析运行结果。(4) 在程序中定义个全局对象,在主函数最前添加语句: cout<<"Enter main"<<endl;运行程序,分析运行结果。4 完善程序,并写出运行结果根据程序要求,完善程序后输入源程序,编译连接
8、,并写出运行结果。如果某个自然数除了1和它本身外还有其他因子,则这个自然数就是合数(非素数)。试定义一个类 NUM,从3开始向上试探找出n个连续的自然数,且它们都是合数。当找到第一组连续的n个合数后,即停止查找。具体要求如下:(1) 私有成员int n :存放满足条件的连续自然数的个数。int *p:根据n的值申请一个动态数组用来存放求出的满足条件的n个自然数。(2) 公有成员函数NUM(int n1):构造函数,用n1初始化n,根据n的值申请动态数组空间,使p指向该动态数组空间。int yes(int x):判断x是否为合数。如果是,返回 1,否则返回0。void fun():从3开始向上试
9、探找出 n个连续的自然数,且它们都是合数,并依次存入动 态数组。void print():输出满足条件的n个合数。NUM():析构函数,释放动态数组所占用的存储空间。(3) 在主函数中定义一个NUM类的对象num,求出10个连续的合数。然后通过对象 num调用成员函数求出10个连续的合数,并输出计算结果。#in clude <iostream.h>class NUM定义数据类NUMprivate:int n; int *p;public:NUM(i nt n1)n=n1;p=_;动态分配存放连续合数的存储空间int yes(i nt x)for(int i=2;i<=x/2;
10、i+) if (x%i=0)return 1;return 0;void fun( void)int j;for(int i=3;1;i+)j=0;while(&&j<n)Pj=i;j+;i+;if(j=n)break;void prin t(void)cout<<"找到的"<<n<<"个连续合数为:"<<endl;for(i nt i=0;i <n ;i+)cout<<pi<<""cout<<e ndl;NUM();/释放
11、在构造函数中申请的存储空间;void mai n()cout<<"请输入要求的连续合数的个数(例如10):"int n;cin»n;NUM num( n); 寻找连续的合数,并存入动态申请的存储空间中 ; /输出寻找到的合数5. 请定义一个矩形类(Rectangle),私有数据成员为矩形的长度(len)和宽度(wid),缺省构造函数置len和wid为0,有参构造函数置len和wid为对应形参的值,另外还包括求矩形周长、 求矩形面积、取矩形长度和宽度、修改矩形长度和宽度为对应形参的值、输出矩形尺寸等公有成员函数。要求输出矩形尺寸的格式为“length :
12、长度,width :宽度”。编写主函数对定义的类进行测试。6. 声明一个时间类,时间类中有3个私有数据成员(Hour, Mi nute , Seco nd)和两个公有成员函数(SetTime和PrintTime)。SetTime根据传递的3个参数为对象设置时间;PrintTime负责将对象表示的时间显示输出,输出格式为“Hour: Mi nute : Seco nd”。(1) 在主函数中,建立一个时间类的对象,设置时间为9点20分30秒并显示该时间。(2) 使用构造函数代替上面的SetTime成员函数,并在主函数中使用构造函数设置时 间为10点40分50秒,并显示该时间。(3) 重载时间类的构
13、造函数(不带参数)使小时、分、秒均为0。(4) 在时间类的析构函数中输出"Good bye!”(5) 定义拷贝构造函数并调用。7下面是一个整型链表类intList 的声明,请给出该类所有数据成员的类外定义,并在主函数中测试该类。class intListprotected:struct Nodeint data;Node *next;Node *L;public:intList();/构造函数intList();/析构函数bool Insert(int i,int elem);bool Remove(int i,int &elem);删除链表的第i个位置的元素,删除成功返回t
14、rue,失败返回falseint Find(int elem);在链表中查找值为elem的元素,找到返回该元素在链表中的位置,否则返回0int Length();/返回链表长度(元素个数)void PrintList();/输出链表;参考答案(非权威,仅仅是我自己的理解,如有错误, 欢迎批评指正!)第一题:#i nclude<iostream.h>class Aapublic:Aa( int i=0)a=i;cout<<"C on structor "<<a<<e ndl; Aa()cout<<"Dest
15、ructor "<<a<<e ndl;void prin t()cout<<a<<e ndl;private:;int a;int main() Aa al(1),a2(2); al.pri nt(); a2.pri nt(); return 0;* 'D:C *Deb l g2. exe-Cu tic 1Constructor' ZLZDe u t i*u.c t o r 2Dcstiruc tor- 1Press <ny TKey Lo contlnute第二题(1)#i nclude<iostream.
16、h> class Datepublic:void set_date(); void show_date();private:;int year; int mon th;int day;Date d;int main()d.set_date(); d.show_date();return 0;void Date:set_date() _cin> >year; cin»month; cin> >day; void Date:show_date() _coutvvyearvv'/'vv mon th<<'/'<
17、<day<<e ndl;(2)#i nclude<iostream.h> class Apublic:A(int i=0) m=i;void show()coutvvmvve ndl;A()frie nd 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)#include<iostream.h>class Xprivate:int a,b,c;public:X(int i)a=i;X()a=b=
18、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);第三题void mai n()TPoint p1(4,9); 调用构造函数初始化plTPoi nt p2(p1);/显示调用拷贝构造函数初始化 p2TPoint p3 = p2; 对象之间的赋值,由于之前没有定义p3,因此用另一个同类的对象给其赋值时,会调用拷贝构造函数。coutvv"p3=("vvp3.getx()vv","vvp3
19、.gety()vv")"v<endl; /输出 p3 在赋值后的 x 和y答:调试程序会程序错误,原因是对于无输入的对象和只要一个输入值的对象没 有相应的构造函数,要解决也挺简单,就是在说明部分加上相应的构造函数就可 以了。修改后的程序如下:#i nclude<iostream.h> class TPointprivate:int X,Y;public:TPoint()X=Y=0; cout<<"A Constructor is called"<<endl;TPoint(int i)X=i;Y=0; cout&l
20、t;<"B Constructor is called"<<endl;TPoint(int x,int y)X=x;Y=y; cout<<"Constructor is called"<<endl;TPoint(TPoint &p);TPoint() cout<<"Destructor is called"<<endl; int getx() return X; int gety() return Y; ;TPoint:TPoint(TPoint &p)
21、X=p.X;Y=p.Y; cout<<"Copy-initialization Constructor is called"<<endl;void main()TPoint p1(4,9); cout<<"p1=("<<p1.getx()<<","<<p1.gety()<<")"<<endl;TPoint p2(p1); cout<<"p2=("<<p2.getx()<&
22、lt;","<<p2.gety()<<")"<<endl;TPoint p3 = p2;coutvv"p3=("vvp3.getx()vv","vvp3.gety()vv")"v<e ndl; TPoi nt p4,p5(2);coutvv"p4=("vvp4.getx()vv","vvp4.gety()vv")"v<e ndl; coutvv"p5=("vvp5.ge
23、tx()vv","vvp5.gety()vv")"v<e ndl;Constriictor Is calledCopy-in It iallzatianConstructorp2=<4,?>Cop y-in it ia llza tzLun Construe tar p3=<4,»>fl Comstrnctor is calledis celledis calledConstructor ig calledp4=<0.0> p5=C2r0> Destructur U)es tructor Dest
24、ructor Destructor Destructoris called is called is called is called is callsdFress 歳ny kev to continue#i nclude<iostream.h>class TPoint private:int X,Y;public:TPoi nt(i nt x,i nt y)X=x;Y=y; cout«"C on structor is called"<<e ndl;TPoi nt(TPoi nt & p);TPoi nt()cout<<
25、;"Destructor is called"<<e ndl;int getx()return X;in t gety()return Y;;TPoi nt:TPoi nt(TPoi nt &p)X=p.X;Y=p.Y; cout«"Copy-initialization Constructor is called"«endl;void mai n()TPoi nt *p仁new TPoi nt(4,9); coutvv"p1=("vvp1->getx()vv","vv
26、p1->gety()vv")"v<e ndl; delete p1;亠褸監二'Debug乜劭|匸 |回 De&tFuctor Qa.ll«d Pmss 科ny kpy i:o rnnt inne#i nclude<iostream.h>class TPoi ntprivate:int X,Y;public:TPoint(int x,int y)X=x;Y=y;cout<<"Constructor is called"<<endl;TPoint(TPoint &p);TPoi
27、nt()cout<<"Destructor is called"<<endl;int getx() return X; int gety() return Y; void ShowPoint()cout<<"p1=("<<X<<","<<Y<<")"<<endl;TPoint:TPoint(TPoint &p) X=p.X;Y=p.Y;cout<<"Copy-initialization C
28、onstructor is called"<<endl;void main()cout<<"Enter main"<<endl;TPoint *p1=new TPoint(4,9); p1->ShowPoint();delete p1;S3 RM卄映肛P吐ugQzbEntdr r>a±nConstrustar io called* Y4、Ifest Filet o-l* is 1f*d Press anv key to continue第四题:#i nclude <iostream.h> cla
29、ss NUM定义数据类NUMprivate:int n; int *p;public:NUM(i nt n1)n=n1;p=new intn;动态分配存放连续合数的存储空间int yes(i nt x)for(int i=2;i<=x/2;i+)if (x%i=O)return 1;return 0;void fun(void)int j;for(int i=3;1;i+)j=0;while(yes(i)&&j<n)pj=i;j+;i+;if(j=n) break;void print(void)coutvv"找到的"<<*<&
30、quot;个连续合数为:"<<endl;for(int i=0;i<n;i+)cout<<pi<<""cout<<endl;NUM()间;void main()if(p) deletep;/释放在构造函数中申请的存储空coutvv"请输入要求的连续合数的个数(例如10):"int n;cin>>n;NUM num(n);num.fun(); /寻找连续的合数,并存入动态申请的存储空间中num.print() ; /输出寻找到的合数第五题:#i nclude<iostream
31、.h>class Recta ngleprivate:int len ,wid;public:Recta ngle()len=wid=0;cout<<"First Con structor is called"<<e ndl;Recta ngle(i nt i,i nt w)len=i;wid=w;cout«"Sec ond Con structor is called"<<e ndl;void Set_Rectangle()cin>>len; cin>>wid;int Get_
32、Perimeter() int Get_Area() int get_len() int get_wid() return 2*(len+wid); return len*wid; return len; return wid; Rectangle() cout<<"Destructor is called"<<endl; ;void main()int temp;Rectangle rect,Default(8,9);cout<<endl;cout<<" 默 认 长 度 : "<<Defaul
33、t.get_len()<<" , "<<" 默 认 宽 度 : "<<Default.get_wid()<<endl;cout<<" 矩形的周长为: "<<Default.Get_Perimeter()<<endl;cout<<" 矩形的面积为: "<<Default.Get_Area()<<endl; cout<<endl;coutvv"是否需要修改参数(1:修改0:退出)
34、:";cin>>temp;while(temp=1)coutvv"请输入矩形的长和宽:"<<e ndl;rect.Set_Rectangle();coutvv" 长 度 : "vvrect.get_len()vv" , "vv" 宽 度 : "vvrect.get_wid()vvendl;coutvv"矩形的周长为:"vvrect.Get_Perimeter()v<e ndl;coutvv"矩形的面积为:"vvrect.Get_Area
35、()v<e ndl; coutvvendl;coutvv"是否需要修改参数(1:修改0:退出):" cin>>temp;coutvvendl;D:C4DebLjg3.exe4F1户*t Constructor is called Second Construetor called岀 艮-改: 3 粥;般 匱S0B0 3 ? fi nTL1 & 尅为为为为 辛修形 I 度罔面酣罔面 4®的需人 .-的的 认形®X昴 度形形 默矩徂日屋启血畏矩矩是否需要修改参数“;修改 阳退岀头0Itestructor is cn丄丄EdP>
36、es:t:Fiiutc»* is calledL_Pl-ess aou kev to continue第六题:#in clude<iostream.h> class Timeprivate:int Hour,M inu te,Sec ond;public:Time()Hour=Minu te=Sec on d=0; cout<<"First Con structor is called"<<e ndl;Time(i nt x,i nt y,i nt z)Hour=x;Minu te=y;Secon d=z;cout«&
37、quot;Sec ond Con structor is called"<<e ndl;Time(Time &p)Hour=p.Hour;Minute=p.Minute;Second=p.Second;cout<<"Copy Constructor is called"<<endl;void SetTime()cin>>Hour;cin>>Minute;cin>>Second;void PrintTime()cout<<" 时 :"<<Hou
38、r<<" "<<" 分 :"<<Minute<<" "<<"秒:"<<Sec on d<<e ndl;Time() cout<<"Good bye!"<<endl; ;void main()Time time;Time T(10,40,50);Time copy=T;cout«e ndlvv"构造函数时间为:"T.PrintTime();coutvve ndl
39、vv"拷贝构造函数时间为:"copy.PrintTime();coutvvendl;coutvvendlvv"请输入一个时间(时 /分/秒):"<<endl<<endl;time.SetTime();coutvve ndlvv'你所输入的时间为:"time.PrintTime();coutvvendl; D:C + 4- 3SDeb ug2 曰畑First Constructoi* is calledSecond Construe tot* is calledpnu* Constructor is called+
40、勾适函数时间知时必 分说 秒汚0 札风构适函数时间为匕E寸皿分:处秒泻B请输八一血间(时勺”秒)=9293S柿所输入的时间为,时沔 分咖 =30£«iCdl hyie*Koo«l byeTood. by>ofri'ca-s any key to Go*ntinuv第七题:#i nclude <iostream> using n amespace std;class in tListprotected:struct Nodeint data;Node * n ext;;Node * L;public:in tList();构造函数intLi
41、st(); / 析构函数bool Insert(int i, int elem) ; /向链表的第i个位置插入元素 elem,插入成功返回true,失败返回falsebool Remove(int i, int &elem) ;/删除链表的第 i个位置的元素 elem,删除成功返回true,失败返回falseint Find(int elem); /查找值为elem的元素,返回该元素在链表的位置int Length() ;/返回链表长度 void PrintList();/ 输出链表 ;intList:intList()/ 构造函数L=new Node; L->next=NULL
42、; cout<<"Constructor is called"<<endl<<endl; intList:intList()/析构函数Node *p,*q;p=L;while ( p->next != NULL )q=p->next;delete p;p=q;delete p;L=NULL; cout<<endl<<"Good bye!"<<endl;bool intList:lnsert(int i,int elem) 向链表的第i个位置插入元素 elem,插入成功 返回true,失败返回falseNode *p,*s;int j;p= L;j=0;while ( (p!=NULL ) && (j<i-1)p=p->next;j+;if ( (p!=NULL )&& (j=i-1)s=new Node;s->data=elem;s->next=p->next;p->next=s;retu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 劳动合同违约责任教案3篇
- 办理土地证委托书范本的结构分析3篇
- 快速制作检验委托书3篇
- 工程合同钢结构制作
- 供应链创新实现供应链协同创新3篇
- 光伏转让合同3篇
- 工商局档案调查书3篇
- 公共设施维护承揽协议3篇
- 代付授权书轻松管理各项支出3篇
- 糖果与巧克力品牌定位与市场细分考核试卷
- 国家开放大学专科《法理学》(第三版教材)形成性考核试题及答案
- 2023年小型水库雨水情测报和大坝安全监测设施项目-实施方案
- (2024年)面神经炎课件完整版
- 减盐减油健康教育教案反思
- 特斯拉国产供应链研究报告
- 如何进行医疗垃圾的安全运输
- 公共停车场建设项目可行性研究报告
- 保安服务标准及工作流程
- 2024年中考数学几何模型归纳(全国通用):18 全等与相似模型之十字模型(学生版)
- 外科疾病分级目录
- 国家级教学成果的培育提炼与申报
评论
0/150
提交评论