C程序设计教程面向对象分册郑秋生完整答案_第1页
C程序设计教程面向对象分册郑秋生完整答案_第2页
C程序设计教程面向对象分册郑秋生完整答案_第3页
C程序设计教程面向对象分册郑秋生完整答案_第4页
C程序设计教程面向对象分册郑秋生完整答案_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

第1章类和对象一、 选择题l.C2.B3.C4.A5.C6.A7.C8C9A10C二、 阅读题1.x=2,y=32・x=2,y=3x!=y3.Cstatic::val=Ocsl.val=lcs2.val=2csl.val=4cs2.val=4四、改错题#include<string.h>#include<iostreain.h>classperson{public:person(intn,chair*nam’chais){num=n;strcpy(name.nam);sex=s;cout«HConstmctorcalled.M«endl;}-person(){cout«MDestmctorcalled.M«endl;}voiddisplay(){cout«Mnum:n«num«endl;cout«Mname:n«naine«endl;cout«Msex:H«sex«endl«endl;}private:iiitnum;chai-naine[10];chai-sex;};iiitmaiii(){personsl(10010/Wang.lfVf);sl.display();persons2(10011/'Zhang_fiin,7m,);s2.display();return0;}五、编程题5.1#include<iostreain>usingnamespacestd;classCBox{public:CBox(double1=0,double\\~0Joubleh=0);doubleareaQ;doublevolume();private:doublelengli:doublewidth;doublelugh;};CBox::CBox(doubleLdoublew.doubleh){lengh=l;width=w;high=h;}doubleCBox::areaQ}doubleCBox::volume(){returnlengh*width*liigh;}voidmain()CBoxboxl(4,5,6);cout«boxl.areaQ«endl:cout«boxl.volume()«endl;}5.2#include<iostreain>usingnamespacestd;classCPomt{public:CPoiiit(doublea=0,doubleb=0){x=a;v=b;}CPoiiit(CPoint&p){x=p.x;y=p-y;}voidprmt(){cout«,,(',«x«H;,«y«n)M;}private:doublex,y;};classCLme{public:CLine(doublexl=0,doubleyl=0,doublex2=0,doubley2=0):p1(xl,yl),p2(x2,y2){}CLine(CPointx,CPointy):pl(x),p2(y){}CLine(CLine&lin){pl=liii.pl;p2=lin.p2;voidDiawLiiie(){cout«MLiiieform11;pl.prmtO;cout«Mton;p2.prmt();cout«endl;}voidLmedel(){cout«ndeletelme,,«endl;}voidmove(CPoint&x^CPoint&y){cout«Hmovelme"«endl;pl=x;p2=y;}private:CPointpLp2;};voidmain(){CPointpointl(l,5),point2(5,8),point3(20,30),point4(40,50);CLineline1(pomt1,pouit2);CLineline2(2,3,&12);Imel.DrawLme();lme2.DrawLme();Ime2.move(point3,pomt4);lme2.DrawLme();liiie2=linel;lme2.DrawLme();liiiel.Linedel();}5.3#include<iostreain>usingnamespacestd;classCComplexpublic:CComplex(double,double);CComplex(CComplex&c);//复数类的拷贝构造函数声明doubleGetReal();doubleGetlinagQ;voidPriiitQ;private:doublereal;doubleunag;};CComplex::CComplex(doubler=0.0,doublei=0.0){real=r;iinag=i;cout«*'调用两个参数的构造函数”《endl;}CComplex::CComplex(CComplex&c) 〃复数类的拷贝构造函数定义{real=c.real;iiiiag=c.iiiiag;cout«*'调用拷贝构造函数”《endl;}doubleCComplex::GetRealQ{retunireal;}doubleCComplex::GetIinag(){retuininiag;}voidCConiplex::Pnnt()//显示复数值{cout«H(H«real« 《imag«H),f«endl;}CComplexadd(CComplex&x,CComplex&y) 〃普通函数完成两个数的加法,对彖作为函数参数,{returnCComplex(x.GetReal()+y.GetReal()xGetlmag()+y.GetIiiiagQ);}voidmain(void){CComplexa(3・0,4・0),b(5・6,7・9);CComplexc(a); //调用复数类的拷贝构造函数cout«na=H;PnntQ;cout«nb=H;PnntQ;cout«”c=H;PiintQ;cout«Hc=a+bH«endl:c=add(久b);cout«Hc=”;c.Pnnt();}5.4#include<iostreain>#include<string>usingnamespacestd;classCStudent 〃类声明{public:CStudent(char*,float,float^float);CStudent(CStudent&s);〜CStud亡nt();voiddisplay();friendfloatavg(CStudent&s);private:char*name;floatgrad[3];};CStudent::CStudent(char*na,floata.floatb.floatc){name=newcliai[strlen(na)+1];sticpv(name4ia);grad[0]=a;grad[l]=b;grad[2]=c;}CStudent::CStudent(CStiident&s){name=newcliai[strlen(s.naine)+1];sticpv(name,);grad[0]=s.grad[0];grad[l]=s.grad[1];grad[2]=s.grad[2];}CStudent:>CStudent()

delete[]name;}voidCStudent::displav(){inti;cout«Hname:H«name«endl;fbr(i=O;i<3;i++)cout«Hgrad[H«i«H]:H«giad[i]«endl;}floatavg(CStudent&s)〃普通函数,需要引用私有成员,{return(s.grad[O]+s.grad[l]+s.giad[2])/3;}iiitmaiii(){CStudentstudl(H张三舄79,9&82);〃定义对象studl.displayO;coutw'1平均成绩:M«avg(stud1)«endl;return0;}5.5#include<iostreain>usingnamespacestd;classCString{public:CStnng();〃缺省构造函数,初始化为空串CStriiig(chai-ch.iiitliRepeat);//用一个字符重复n次,CStriiig(constchar*psz);〃用一个字符串初始化CStimg(CStrmg&stimgser);〃拷贝构造函数-CStimgQ;intGetLength()const;boolIsEmptyOconst;charGetAt(intrniidex)const;voidSetat(iiitnindex,charch);voidPriiit();intcompare(CStrmg&string);intcompare(constchai*psz)const;声明为学生类的友元函数初始化字符串voidVacate();声明为学生类的友元函数初始化字符串private:char*s;};CStimg::CStrmg(){s=NULL;}CStiiiig::CStrmg(CStrmg&stiingsei){s=newchai[strlen(strmgsei;s)+l];if(s!=O)strcpy(s.stringser.s);}CStiiiig::CStrmg(chai-ch,mtiiRepeat){s=newchai[iiRepeat+l];for(inti=O;i<nRepeat;i-H-)s[i]=ch;s[iiRepeat]=,\O,;}CStiiiig::CStrmg(constchai*psz){s=newchai[strlen(psz)+1];if(s!=O)strcpv(s,psz);}mtCStiiiig::GetLength()const{int1=0;wliile(s[i]!="\(r)1++;returni;}boolCString::IsEmptv()const{if(s=NULL)return1;elsereturn0:}voidCString::Vacate(){sWHO:cout«,rNowhavevacatedstrmg.n«endl:}charCString::GetAt(intnmdex)constif(nindex>1&&mndex<=GetLengthQ+1)returns[nindex-1];elsereturnO;}voidCString::Setat(iiitmndex,charch)if(nindex>1&&mndex<=GetLengthQ+1)s[niiidex・l]=ch;}voidCStiing::Print(){cout«s«endl:}mtCStimg::compare(CString&string){if(strcinp(s,string.s)>O)return1;elseif(strcmp(s,strmg.s)<0)return-1;elsereturn0;}iiitCStiiiig::compare(constchar*psz)const{if(strcu)p(s,psz)>0)return1;elseif(strcmp(s.psz)<0)return-1;elsereturn0;}CStimg:>CStimgQ//cout«endl«H析构:H«s«endl;if(s!=NULL)deleters;}voidmain(){chai-a[4]=y;charb[4];CStringc1(HHellowH)?c2(c1);cout«HStnngclis:H«H”;cl.PrmtO;cout«endl:cout«HStnngc2is:H«H”;c2.Prmt();cout«endl:CStringc3fb\3);cout«HStnngc3is:H«H”;c3.Prmt();cout«endl:cout«H*******************以卞是对串的基本操作****************-<<endl;iiitnum=c1.GetLengthQ;chaich;cout«Hcl的长度是:H«MH«num«endl;ch=cl.GetAt(5);cout«H获得字符串cl中^"«5«"个字符是:”v<chv<endl;cout«"下面是插入字符串cl中一个特殊字符,d'"«endl;cl.Setat(5?d,);cout«H插入后字符串cl变为:H«MM;cl.PrintO;/〃/〃////////////////cout«endl;if(c1.IsEmpty()==1)cout«HStringisempty.M«endl;elsecout«HStringisn'tempty.H«endl;cout«"F面是判断字符串cl清空“vvendl;cl.VacateQ;cout«H清空后输出字符串cl.PrmtQ;cout«"字符串已被清空"《endl;cout«"请按任意键继续"«endl;ciii»b;///////////////////////〃//cout«H****************以下是对串的赋值******************-<<eiidl;CStiiiigc5=c2;cout«HStrmgc5=c2 ,,;c5.Piint();cout«endl;cout«H****************以下是对串的比较******************-<<eiidl;mttemp=pare(c3);cout«H以下比较c2与c3H«endl;if(temp>0)cout«HStnngc2>Stiiiigc3"«endl;elseif(temp<0)cout«HStnngc2<Stiiiigc3"«endl;elsecout«HStnngc9==Strmgc4M«endl;cout«endl;cout«H以下比较c2与任意字符串Goodboy!H«endl;if(paie(MGoodboy!”)>0)cout«,,Strmgc2>rGoodboy!,H«endl;elseif(pare(nGoodboy!H)<0)cout«HStnngc2<Goodboy!M«endl;elsecout«HStnngc2=-Goodboy!H,«endl;}第二章继承和派生一、选择题1.D2.B3.D一、阅读程序题四、编程题4.1#include<iostreain.h>#iiiclude<stiing.h>#definePAI3.14classCiiclepublic:CiicleQ{r=O;}Ciicle(doubled){i-d;}doubleaiea(){ieturn(PAI*i*i);}voiddisplay1Q{cout«H桌子的面积:"«aiea()«endl;}private:doubler;};classTable{public:TableQ{heig=O;}Table(doubleh){heig=h;}voiddisplav2Q{cout«H桌子的高度:"«lieig«end1:}private:doubleheig;};classRoundtable:publicCircle,publicTable{public:RoundtableQ{strcpy(color,"白色");}Roundtable(doublea.doubleb.char*c):Ciicle(a),Table(b){strcpv(color,c);}voiddisplay(){displayIQ;display2();cout«H桌子的颜色:,,«color«endl;}private:charcolor[20];};voidmain(){Roundtables.displayQ;}4.2如果Age在基类中被定义为私有的,SetAge(uitn)不能直接给Age赋值,如果Age是基类的公有成员变量,则可以直接赋值。classAniiiial{public:Aiiimal(){};mtAge;};classDog:publicAnuual{public:Dog(){};VoidSetAge(mtn){Age=n;}};4.3#include<iostreain.h>classRectangle{public:Rectangle(doubleLdoublew){length=Lwidth=w}doublearea(){renunlength*width;}voiddisplayIQ;private:doublelength;doublewidtli;};voidRectangle::display1Q{cout«H长:”《length<vendl;cout«H宽:H«width«endl;}classCuboid:publicRectangle{public:Cuboid(doubleL.doublew,doubleh):Rectangle(L,w){high=h5volume=L*w*high};doublevol(){ietuniareaQ*high;}voidshow(J;private:doublehigh;doublevolume;};voidCuboid::showQ{displayIQ;cout«H高:M«high«endl;cout«H体积:H«volQ«endl;}voidmain(){Cuboidcub(10.20?30);cub.showQ;}4.4#include<iostreain.h>classVehicle{public:Vehicle():niaxspeed(O),weight(O){}Velucle(doublem,doublew):maxspeed(m),weight(w){};voidrun(){cout«"可以奔跑,,«endl;}voidstop(){cout«"可以停止奔跑,'«endl;}private:doubleniaxspeed;doubleweight;};classBicycle:virtualpublicVeliicle{public:Bicycle(doublenxdoublew.doubleh):Vehicle(nLW)Jieight(h){}private:doubleheiglit;};classMotorcar:viitualpublicVehicle{public:Motorcai-(doublenhdoublew,doubles):Velucle(m,w),setnum(s){}private:doublesetnum;};classMotorcycle:publicBicycle,publicMotorcai{public:Motorcvcle(double m,double w.doubleh,doubles):Bicycle(m,w.h),Motoicar(m,w,s),Veliicle(m,w){}};voidmain()Motorcyclesi(300,10,6,30);si.11111();sl.stopQ;}如果不把Vehicle设置为虚基类,会产生二义性问题。第3章多态性3.1简答题哪些运算符可以重载?几乎所有的运算符都可以重载,除了以下的几个运算符:,9-• , •• 7 ••运算符重载后,优先级和结合性如何?用户重新定义运算符,不改变原运算符的的优先级和结合性。同时运算符重载后,也不改变运算符的语法结构,即单目运算符只能重载为单目运算符,双目运算符只能重载为双目运算符。编译程序如何选用运算符函数?在每一种编译系统中,运算符实际上都对应一个函数,只是这种运算对用户具有透明性,使用者并不知道函数的存在。运算符重载实际上是运算符函数的重载,所以运算符的重载实际上是函数的重载。编译程序对运算符重载的选择,遵循着函数重载的选择原则。当遇到不很明显的运算符时,编译程序将去寻找参数相匹配的运算符函数。重载运算符有哪些限制?(1) 不可臆造新的运算符(2) 坚持四个不能改变。不能改变运算符原有的优先级不能改变运算符原有的结合性不能改变运算符原有的语法结构不能改变运算符原有的操作数个数但允许改变运算符的返回类型(3) C卄规定,运算符中,参数类型都是内部类型时,不允许重载。“::、*、->、?:”这五个运算符不能重载。运算符重载必须遵循哪些原则?运算符重载可以使程序更加简洁,使表达式更加直观,增强可读性。但是,运算符重载使用不宜过多,否则会带来一定的麻烦。运算符重载必须遵循以下原则:(1) 重载运算符含义必须清楚。(2) 重载运算符不能有二义性。3.2填空题3.2.1C++中多态性包扌舌两种多态性:(1)和⑵。前者是通过(3)实现的,而后者是通过一(4)和(5) 来实现的。答案:(1)编译时的(2) 运行时的(3) 函数和运算符的重载(4) 类继承关系(5) 虚函数3.2.2纯虚函数定义时在函数参数表后加(1),它表明程序员对函数(2),其本质是将指向函数体的指针定为(3)。答案:(1)=0(2) 不定义(3) NULL3.2.3在基类中将一个成员函数说明成虚函数后,在其派生类中只要(1) 、 (2)和(3)完全一样就认为是虚函数,而不必再加关键字(4) °如有任何不同,则认为是(5)而不是虚函数。除了非成员函数不能作为虚函数外, (6)、 (7)和 (8)也不能作为虚函数。答案:(1)同虚函数名(2) 同参数表(3) 同返回类型。如基类中返回基类指针,而派生类中返回派生类指针是允许的(4) viitual(5) 重载(6) 静态成员函数(7) 内联函数(8) 构造函数第三大题答案:1答案:iiiclude<iostieam.h>iiiclude<string.h>classCStudent{clwnaine[20];clwnativeplace[20];charcode[30];mtage;floatscore;public:CStudent(charchar*,char*.mtafloat);CStudent(CStudent&s);voiddisplay();floatoperatoi+(CStudentsi);};CStudent::CStudent(chai*name,char*native,char*codejntage,floatscore){strcpy(tlus->naiiiejiaine);strcpv(tliis->iiativeplace4iative);strcpy(tliis->code,code);this->age=age;this->score=score;}CStudent::CStudent(CStiident&s){strcpy(tliis->naine,);strcpy(tlus->nativeplace,s.nativeplace);strcpv(tliis->code,s.code);this->age=s.age;this->score=s.scoie;}voidCStudent::display(){H«score«endl;cout«name«,*,'«nativeplace«"H«code«HH«score«endl;}floatCStudent:operator+(CSmdentsi){returntliis->score+s1.score;}voidmain(){CStudentw(Hwlil^HzliengzliouH;,,\30.90);w.display();CStudentc(',ctm,7,zhengzhou'7"\30,90);c.displayQ;cout«w+c«endl;}2答案:iiiclude<iostieam.h>iiiclude<string.h>iiiclude<math.h>classCTriangle{floata、b,c;public:CTiiangle(floata.floatb.floatc)tliis->a=a;tliis->b=b;tliis->c=c;}floatGetAieaQfloatt=(a+b-rc)/2;returnsqrt(t*(t-a)*(t-b)*(t-c));floatoperator+(CTrianglet)ireturntliis->GetAieaQ+t.GetAiea();};voidmain()CTriangletrl(3,4,5),tr2(6,8,10);cout«trl+ti2«endl;}3.3答案:#iiiclude<iostieam.h>classBaseClasspublic:viitualvoidfl(){cout«HBaseClass::flO"«endl:}voidf2Q{cout«HBaseClass::f20"«endl:}};classDerivedClass:publicBaseClasspublic:voidfl0{cout«HDerivedClass::fl()M«endl;}voidf2Q{cout«HDerivedClass::£2()n«endl;}};voidmain()DerivedClassdl;BaseClass*Bptr;DerivedClass*Dptr;Bptr->f2Q;Dpt尸&dl;Dptr->flQ;Dptr->f2();}习题四一、 选择题D2.A3.B4.C5.C6.C7.A二、 简答题什么叫做流?流的提取和插入是指什么?I/O流在C++中起着怎样的作用?答:流是一种抽彖,它负贵在数据的生产者(程序/文件)和数据的消费者(文件/程序)之间建立联系,并管理数据的流动。一般意义下的读操作在流数据抽象中被称为(从流中)提取,写操作被称为(向流中)插入。完成数据从动态(内存)到静态(外存)的转换,或着是从静态(外存)到动态(内存)的转换。什么是字节流、字符流和二进制流?答:根据对字节内容的解释方式,字节流分为字符流(也称文本流)和二进制流。字符流将字节流的每个字节按ASCII字符解释,它在数据传输时需作转换,效率较低。例如源程序文件和文本文件都是字符流。由于ASCII字符是标准的,所以字符流可以直接编辑,显示或打印,字符流产生的文件通行于各类计算机。二进制流将字节流的每个字节以二进制方式解释,它在数据传输时不作任何转换,故效率高。但各类计算机对数据的二进制存放格式各有差异,且无法人工阅读,故二进制流产生的文件可移植性较差。3•cen和clog作用是什么?有何区别?答:对于输入提示信息或输出结果而言,cerr和clog的用法相同,但作用不同。cerr的作用足向标准错误设备(standarderrordevice)输出有关出错信息。cerr流中的信息只能在显示器输出。当调试程序时,往往不希塑程序运行时的出错信息被送到其他文件,而要求在显示器上及时输出,这时应该用cerr,cen•流中的信息是用户根据需要指定的。clog流对彖也是标准错误流,它是consolelog的缩写。它的作用和cht相同,都是在终端显示器上显示出错信息。不同的是cerr不经过缓冲区,直接向显示器上输出有关信息,而clog中的信息存放在缓冲区中,缓冲区满后或遇endl时向显示器输出。用什么方法来控制输入输出流中出现的错误?答:为提高程序的可靠性,应在程序中检测攻)流的操作是否正常。当检测到流操作出现错误时,可以通过异常处理来解决问题。比较读写文本文件与二进制文件的异同。答:从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:ASC码:00110101001101100011011100111000I iIi十进制码:5 6 7 8共占用4个字节。ASCH码文件可在屏幕上按字符显示,例如源程序文件就是ASCD文件,用DOS命令TYPE可显示文件的内容。由于是按字符显示,因此能读懂文件内容。二进制文件是按二进制的编码方式来存放文件的。例如,数5678的存储形式为:0001011000101110只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C卄系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此也把这种文件称作“流式文件”。随机读写是什么意思,常用于哪种类型的文件?答:在C卄中可以由程序移动文件指针,从而实现文件的随机访问,即可读写流中任意一段内容。一般文本文件很难准确定位,所以随机访问多用于二进制文件。文件流和字符串流有什么区别?答:文件在C卄看来是字符流或二进制流,文件流是以外存文件为输入输出对彖的数据,所以文件流是与设备相关的。可以把流的概念应用到字符串(Sumg)上。这样字符串就可以看作字符串流。字符串流不是以外存文件为输入输出的对彖,而以内存中用户定义的字符数组为输入输出的对彖。字符串流是与内存相关,所以也称内存流。可以用输入输出操作来完成字符串流的操作。三、编程题1.x= 468v=-3.42565x=468 v=-3.42565x=+468******y=-3.43*****2.生成一个名称为data.txt文件,内容:Tinsistestdata3・源程序。^include<iostreain>#include<iomanip>usingnamespacestd;iiitmain(){fdr(intn=8;n>0;n-)cout<<setw(20-n)<<,,*,,<<^etfUl(,*i)<<setw(2*n-l)<<HH«setfill(,,)«setw(20-n)«endl;retuin0;}源程序。#iiiclude<fstr

温馨提示

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

评论

0/150

提交评论