C---实验二-类与对象(附答案).

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验二类与对象实验目的和要求1.掌握类、类的数据成员、类的成员函数的定义方式。2.理解类成员的访问控制方式。3.掌握对象的定义和操作对象的方法。4.理解构造函数和析构函数的定义与执行过程。5.掌握重载构造函数的方法。6.了解拷贝构造函数的定义方法。实验内容1.下面程序中有错,在不删除和增加代码行的情况下,改正错误语句,使其正确运行。#includeiostream.hclassAa{public:Aa(inti=0){a=i;coutConstructoraendl;}~Aa(){coutDestructoraendl;}voidprint(){coutaendl;}private:inta;};intmain(){Aaal(1),a2(2);al.print();couta2.aendl;return0;}2.检查下面的程序,找出其中的错误,并改正。然后上机调试,使程序能正常运行。(1)#includeiostream.hclassDate{voidset_date();voidshow_date();intyear;intmonth;intday;};Dated;intmain(){set_date();show_date();}voidset_date(){cind.year;cind.month;cind.day;}voidshow_date(){coutd.year'/'d.month'/'d.dayendl;}(2)#includeiostream.hclassA{public:voidA(inti=0){m=i;}voidshow(){coutmendl;}void~A(){}private:intm;};intmain(){Aa(5);a.m+=10;a.show();return0;}(3)#includeiostream.hclassX{private:inta=0;int&b;voidsetA(inti){a=i;}X(inti){a=i;}public:intX(){a=b=0;}X(inti,intj){a=i;b=j;}voidsetC(intk){c=c+k;}};voidmain(){Xx1;Xx2(2);Xx3(1,2);x1.setA(3);}3.调试下列程序。#includeiostream.hclassTPoint{private:intX,Y;public:TPoint(intx,inty){X=x;Y=y;coutConstructoriscalledendl;}TPoint(TPoint&p);~TPoint(){coutDestructoriscalledendl;}intgetx(){returnX;}intgety(){returnY;}};TPoint::TPoint(TPoint&p){X=p.X;Y=p.Y;coutCopy-initializationConstructoriscalledendl;}voidmain(){TPointp1(4,9);TPointp2(p1);TPointp3=p2;coutp3=(p3.getx(),p3.gety())endl;}(1)写出程序的输出结果,并解释输出结果。(2)按下列要求进行调试:在主函数体内,添加下列说明语句:TPointp4,p5(2);调试程序会出现什么现象?为什么?如何解决?(提示:对已有的构造函数进行适当修改)结合运行结果分析如何使用不同的构造函数创建不同的对象。(3)在主函数内使用new创建不同参数动态两个动态对象,输出其坐标,并用delete删除之。运行程序,分析运行结果。(4)在程序中定义个全局对象,在主函数最前添加语句:coutEntermainendl;运行程序,分析运行结果。4.完善程序,并写出运行结果根据程序要求,完善程序后输入源程序,编译连接,并写出运行结果。如果某个自然数除了1和它本身外还有其他因子,则这个自然数就是合数(非素数)。试定义一个类NUM,从3开始向上试探找出n个连续的自然数,且它们都是合数。当找到第一组连续的n个合数后,即停止查找。具体要求如下:(1)私有成员intn:存放满足条件的连续自然数的个数。int*p:根据n的值申请一个动态数组用来存放求出的满足条件的n个自然数。(2)公有成员函数NUM(intn1):构造函数,用n1初始化n,根据n的值申请动态数组空间,使p指向该动态数组空间。intyes(intx):判断x是否为合数。如果是,返回1,否则返回0。voidfun():从3开始向上试探找出n个连续的自然数,且它们都是合数,并依次存入动态数组。voidprint():输出满足条件的n个合数。~NUM():析构函数,释放动态数组所占用的存储空间。(3)在主函数中定义一个NUM类的对象num,求出10个连续的合数。然后通过对象num调用成员函数求出10个连续的合数,并输出计算结果。#includeiostream.hclassNUM{//定义数据类NUMprivate:intn;int*p;public:NUM(intn1){n=n1;p=;//动态分配存放连续合数的存储空间}intyes(intx){for(inti=2;i=x/2;i++)if(x%i==0)return1;return0;}voidfun(void){intj;for(inti=3;1;i++){j=0;while(&&jn){p[j]=i;j++;i++;}if(j==n)break;}}voidprint(void){cout找到的n个连续合数为:endl;for(inti=0;in;i++)coutp[i];coutendl;}~NUM(){;//释放在构造函数中申请的存储空间}};voidmain(){cout请输入要求的连续合数的个数(例如10):;intn;cinn;NUMnum(n);;//寻找连续的合数,并存入动态申请的存储空间中;//输出寻找到的合数}5.请定义一个矩形类(Rectangle),私有数据成员为矩形的长度(len)和宽度(wid),缺省构造函数置len和wid为0,有参构造函数置len和wid为对应形参的值,另外还包括求矩形周长、求矩形面积、取矩形长度和宽度、修改矩形长度和宽度为对应形参的值、输出矩形尺寸等公有成员函数。要求输出矩形尺寸的格式为“length:长度,width:宽度”。编写主函数对定义的类进行测试。6.声明一个时间类,时间类中有3个私有数据成员(Hour,Minute,Second)和两个公有成员函数(SetTime和PrintTime)。SetTime根据传递的3个参数为对象设置时间;PrintTime负责将对象表示的时间显示输出,输出格式为“Hour:Minute:Second”。(1)在主函数中,建立一个时间类的对象,设置时间为9点20分30秒并显示该时间。(2)使用构造函数代替上面的SetTime成员函数,并在主函数中使用构造函数设置时间为10点40分50秒,并显示该时间。(3)重载时间类的构造函数(不带参数)使小时、分、秒均为0。(4)在时间类的析构函数中输出Goodbye!”(5)定义拷贝构造函数并调用。7.下面是一个整型链表类intList的声明,请给出该类所有数据成员的类外定义,并在主函数中测试该类。classintList{protected:structNode{intdata;Node*next;};Node*L;public:intList();//构造函数~intList();//析构函数boolInsert(inti,intelem);boolRemove(inti,int&elem);//删除链表的第i个位置的元素,删除成功返回true,失败返回falseintFind(intelem);//在链表中查找值为elem的元素,找到返回该元素在链表中的位置,否则返回0intLength();//返回链表长度(元素个数)voidPrintList();//输出链表};参考答案(非权威,仅仅是我自己的理解,如有错误,欢迎批评指正!)第一题:#includeiostream.hclassAa{public:Aa(inti=0){a=i;coutConstructoraendl;}~Aa(){coutDestructoraendl;}voidprint(){coutaendl;}private:inta;};intmain(){Aaal(1),a2(2);al.print();a2.print();return0;}第二题(1)#includeiostream.hclassDate{public:voidset_date();voidshow_date();private:intyear;intmonth;intday;};Dated;intmain(){d.set_date();d.show_date();return0;}voidDate::set_date(){cinyear;cinmonth;cinday;}voidDate::show_date(){coutyear'/'month'/'dayendl;}(2)#includeiostream.hclassA{public:A(inti=0){m=i;}voidshow(){coutmendl;}~A(){}friendvoidadd(A&);private:intm;};voidadd(A&a){a.m+=10;}intmain(){Aa(5);add(a);a.show();return0;}(3)#includeiostream.hclassX{private:inta,b,c;public:X(inti){a=i;}X(){a=b=0;}X(inti,intj){a=i;b=j;}voidsetC(intk){c=c+k;}voidsetA(inti){a=i;}};voidmain(){Xx1;Xx2(2);Xx3(1,2);x1.setA(3);}第三题(1)voidmain(){TPointp1(4,9);//调用构造函数初始化p1TPointp2(p1);//显示调用拷贝构造函数初始化p2TPointp3=p2;//对象之间的赋值,由于之前没有定义p3,因此用另一个同类的对象给其赋值时,会调用拷贝构造函数。coutp3=(p3.getx(),p3.gety())endl;//输出p3在赋值后的x和y}(2)答:调试程序会程序错误,原因是对于无输入的对象和只要一个输入值的对象没有相应的构造函数,要解决也挺简单,就是在说明部分加上相应的构造函数就可以了。修改后的程序如下:#includeiostream.hclassTPoint{private:intX,Y;public:TPoint(){X=Y=0;coutAConstructoriscalledendl;}TPoint(inti){X=i;Y=0;coutBConstructoriscalledendl;}TPoint(intx,inty){X=x;Y=y;coutConstructoriscalledendl;}TPoint(TPoint&p);~TPoint(){coutDestructoriscalledendl;}intgetx(){returnX;}intgety(){returnY;}};TPoint::TPoint(TPoint&p){X=p.X;Y=p.Y;coutCopy-initializationConstruct

1 / 28
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功