C++程序设计教程面向对象分册完整答案.docx
- 文档编号:28301868
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:28
- 大小:21.90KB
C++程序设计教程面向对象分册完整答案.docx
《C++程序设计教程面向对象分册完整答案.docx》由会员分享,可在线阅读,更多相关《C++程序设计教程面向对象分册完整答案.docx(28页珍藏版)》请在冰豆网上搜索。
C++程序设计教程面向对象分册完整答案
第1章类和对象
一、选择题
8C9A10C
二、阅读题
1.x=2,y=3
2.x=2,y=3
x!
=y
3.
Cstatic:
:
va1=0
=1
=2
=4
=4
四、改错题
#include<>
#include<>
classperson
{
public:
person(intn,char*nam,chars)
{
num=n;
strcpy(name,nam);
sex=s;
cout<<"Constructorcalled."< } ~person() { cout<<"Destructorcalled."< } voiddisplay() { cout<<"num: "< cout<<"name: "< cout<<"sex: "< } private: intnum; charname[10]; charsex; }; intmain() { persons1(10010,"'Wang_li",'f'); (); persons2(10011,"Zhang_fun",'m'); (); return0; } 五、编程题 5.1 #include usingnamespacestd; classCBox { public: CBox(doublel=0,doublew=0,doubleh=0); doublearea(); doublevolume(); private: doublelengh; doublewidth; doublehigh; }; CBox: : CBox(doublel,doublew,doubleh) { lengh=l; width=w; high=h; } doubleCBox: : area() { return2*(lengh*width+lengh*high+width*high); } doubleCBox: : volume() { returnlengh*width*high; } voidmain() { CBoxbox1(4,5,6); cout<<()< cout<<()< } #include usingnamespacestd; classCPoint { public: CPoint(doublea=0,doubleb=0) { x=a; y=b; } CPoint(CPoint&p) { x=; y=; } voidprint() { cout<<"("< } private: doublex,y; }; classCLine { public: CLine(doublex1=0,doubley1=0,doublex2=0,doubley2=0): p1(x1,y1),p2(x2,y2) { } CLine(CPointx,CPointy): p1(x),p2(y) { } CLine(CLine&lin) { p1=; p2=; } voidDrawLine() { cout<<"Lineform"; (); cout<<"to"; (); cout< } voidLinedel() { cout<<"deleteline"< } voidmove(CPoint&x,CPoint&y) { cout<<"moveline"< p1=x; p2=y; } private: CPointp1,p2; }; voidmain() { CPointpoint1(1,5),point2(5,8),point3(20,30),point4(40,50); CLineline1(point1,point2); CLineline2(2,3,8,12); (); (); (point3,point4); (); line2=line1; (); (); } #include usingnamespacestd; classCComplex { public: CComplex(double,double); CComplex(CComplex&c);< } charCString: : GetAt(intnindex)const { if(nindex>1&&nindex<=GetLength()+1) returns[nindex-1]; else return'0'; } voidCString: : Setat(intnindex,charch) { if(nindex>1&&nindex<=GetLength()+1) s[nindex-1]=ch; } voidCString: : Print() { cout< } intCString: : compare(CString&string) { if(strcmp(s,>0) return1; elseif(strcmp(s,<0) return-1; else return0; } intCString: : compare(constchar*psz)const { if(strcmp(s,psz)>0) return1; elseif(strcmp(s,psz)<0) return-1; elsereturn0; } CString: : ~CString() { < else cout<<"Stringisn'tempty."< cout<<"下面是判断字符串c1清空"< (); cout<<"清空后输出字符串c1: "<<"\n"; (); cout<<"字符串已被清空"< cout<<"请按任意键继续"< cin>>b; D 一、阅读程序题 四、编程题 #include<> #include<> #definePAI classCircle { public: Circle(){r=0;} Circle(doubled){r=d;} doublearea(){return(PAI*r*r);} voiddisplay1(){cout<<"桌子的面积: "< private: doubler; }; classTable { public: Table(){heig=0;} Table(doubleh){heig=h;} voiddisplay2(){cout<<"桌子的高度: "< private: doubleheig; }; classRoundtable: publicCircle,publicTable { public: Roundtable(){strcpy(color,"白色");} Roundtable(doublea,doubleb,char*c): Circle(a),Table(b){strcpy(color,c);} voiddisplay() {display1(); display2(); cout<<"桌子的颜色: "< private: charcolor[20]; }; voidmain() { Roundtables,,"黑色"); (); } 如果Age在基类中被定义为私有的,SetAge(intn)不能直接给Age赋值,如果Age是基类的公有成员变量,则可以直接赋值。 classAnimal { public: Animal(){}; intAge; }; classDog: publicAnimal { public: Dog(){}; VoidSetAge(intn) { Age=n; } }; #include<> classRectangle { public: Rectangle(doublel,doublew){length=l,width=w} doublearea(){returnlength*width;} voiddisplay1(); private: doublelength; doublewidth; }; voidRectangle: : display1() {cout<<"长: "< cout<<"宽: "< classCuboid: publicRectangle { public: Cuboid(doubleL,doublew,doubleh): Rectangle(L,w){high=h,volume=L*w*high}; doublevol(){returnarea()*high;} voidshow(); private: doublehigh; doublevolume; }; voidCuboid: : show() { display1(); cout<<"高: "< cout<<"体积: "< } voidmain() { Cuboidcub(10,20,30); (); } #include<> classVehicle { public: Vehicle(): maxspeed(0),weight(0){} Vehicle(doublem,doublew): maxspeed(m),weight(w){}; voidrun() {cout<<"可以奔跑"< voidstop() {cout<<"可以停止奔跑"< private: doublemaxspeed; doubleweight; }; classBicycle: virtualpublicVehicle { public: Bicycle(doublem,doublew,doubleh): Vehicle(m,w),height(h){} private: doubleheight; }; classMotorcar: virtualpublicVehicle { public: Motorcar(doublem,doublew,doubles): Vehicle(m,w),setnum(s){} private: doublesetnum; }; classMotorcycle: publicBicycle,publicMotorcar { public: Motorcycle(doublem,doublew,doubleh,doubles): Bicycle(m,w,h),Motorcar(m,w,s),Vehicle(m,w){} }; voidmain() { Motorcycles1(300,10,6,30); (); (); } 如果不把Vehicle设置为虚基类,会产生二义性问题。 第3章多态性 简答题 3.1.1哪些运算符可以重载 几乎所有的运算符都可以重载,除了以下的几个运算符: .,: : ,: 3.1.2运算符重载后,优先级和结合性如何 用户重新定义运算符,不改变原运算符的的优先级和结合性。 同时运算符重载后,也不改变运算符的语法结构,即单目运算符只能重载为单目运算符,双目运算符只能重载为双目运算符。 3.1.3编译程序如何选用运算符函数 在每一种编译系统中,运算符实际上都对应一个函数,只是这种运算对用户具有透明性,使用者并不知道函数的存在。 运算符重载实际上是运算符函数的重载,所以运算符的重载实际上是函数的重载。 编译程序对运算符重载的选择,遵循着函数重载的选择原则。 当遇到不很明显的运算符时,编译程序将去寻找参数相匹配的运算符函数。 3.1.4重载运算符有哪些限制 (1)不可臆造新的运算符 (2)坚持四个不能改变。 不能改变运算符原有的优先级 不能改变运算符原有的结合性 不能改变运算符原有的语法结构 不能改变运算符原有的操作数个数 但允许改变 运算符的返回类型 (3)C++规定,运算符中,参数类型都是内部类型时,不允许重载。 “: : 、*、->、: ”这五个运算符不能重载。 3.1.5运算符重载必须遵循哪些原则 运算符重载可以使程序更加简洁,使表达式更加直观,增强可读性。 但是,运算符重载使用不宜过多,否则会带来一定的麻烦。 运算符重载必须遵循以下原则: (1)重载运算符含义必须清楚。 (2)重载运算符不能有二义性。 填空题 3.2.1C++中多态性包括两种多态性: (1)和 (2)。 前者是通过(3)实现的,而后者是通过(4)和(5)来实现的。 答案: (1)编译时的 (2)运行时的 (3)函数和运算符的重载 (4)类继承关系 (5)虚函数 3.2.2纯虚函数定义时在函数参数表后加 (1),它表明程序员对函数 (2),其本质是将指向函数体的指针定为(3)。 答案: (1)=0 (2)不定义 (3)NULL 3.2.3在基类中将一个成员函数说明成虚函数后,在其派生类中只要 (1)、 (2)和(3)完全一样就认为是虚函数,而不必再加关键字(4)。 如有任何不同,则认为是(5)而不是虚函数。 除了非成员函数不能作为虚函数外,(6)、(7)和(8)也不能作为虚函数。 答案: (1)同虚函数名 (2)同参数表 (3)同返回类型。 如基类中返回基类指针,而派生类中返回派生类指针是允许的 (4)virtual (5)重载 (6)静态成员函数 (7)内联函数 (8)构造函数 第三大题答案: 3.1答案: #include<> #include<> classCStudent { charname[20]; charnativeplace[20]; charcode[30]; intage; floatscore; public: CStudent(char*,char*,char*,int,float); CStudent(CStudent&s); voiddisplay(); floatoperator+(CStudents1); }; CStudent: : CStudent(char*name,char*native,char*code,intage,floatscore) { strcpy(this->name,name); strcpy(this->nativeplace,native); strcpy(this->code,code); this->age=age; this->score=score; } CStudent: : CStudent(CStudent&s) { strcpy(this->name,; strcpy(this->nativeplace,; strcpy(this->code,; this->age=; this->score=; } voidCStudent: : display() { cout< } floatCStudent: : operator+(CStudents1) { returnthis->score+; } voidmain() { CStudentw("whl","zhengzhou","",30,90); (); CStudentc("ctm","zhengzhou","",30,90); (); cout< } 3.2答案: #include<> #include<> #include<> classCTriangle { floata,b,c; public: CTriangle(floata,floatb,floatc) { this->a=a; this->b=b; this->c=c; } floatGetArea() { floatt=(a+b+c)/2; returnsqrt(t*(t-a)*(t-b)*(t-c)); } floatoperator+(CTrianglet) { returnthis->GetArea()+(); } }; voidmain() { CTriangletr1(3,4,5),tr2(6,8,10); cout< } 3.3答案: #include<> classBaseClass { public: virtualvoidf1() {cout<<"BaseClass: : f1()"< voidf2() {cout<<"BaseClass: : f2()"< }; classDerivedClass: publicBaseClass { public: voidf1() {cout<<"DerivedClass: : f1()"< voidf2() {cout<<"DerivedClass: : f2()"< }; voidmain() { DerivedClassd1; BaseClass*Bptr; DerivedClass*Dptr; Bptr=&d1; Bptr->f1(); Bptr->f2(); Dptr=&d1; Dptr->f1(); Dptr->f2(); } 习题四 一、选择题 1.D2.A3.B4.C5.C6.C7.A 二、简答题 1.什么叫做流流的提取和插入是指什么I/O流在C++中起着怎样的作用 答: 流是一种抽象,它负责在数据的生产者(程序/文件)和数据的消费者(文件/程序)之间建立联系,并管理数据的流动。 一般意义下的读操作在流数据抽象中被称为(从流中)提取,写操作被称为(向流中)插入。 完成数据从动态(内存)到静态(外存)的转换,或着是从静态(外存)到动态(内存)的转换。 2.什么是字节流、字符流和二进制流 答: 根据对字节内容的解释方式,字节流分为字符流(也称文本流)和二进制流。 字符流将字节流的每个字节按ASCⅡ字符解释,它在数据传输时需作转换,效率较低。 例如源程序文件和文本文件都是字符流。 由于ASCⅡ字符是标准的,所以字符流可以直接编辑,显示或打印,字符流产生的文件通行于各类计算机。 二进制流将字节流的每个字节以二进制方式解释,它在数据传输时不作任何转换,故效率高。 但各类计算机对数据的二进制存放格式各有差异,且无法人工阅读,故二进制流产生的文件可移植性较差。 3.cerr和clog作用是什么有何区别 答: 对于输入提示信息或输出结果而言,cerr和clog的用法相同,但作用不同。 cerr的作用是向标准错误设备(standarderrordevice)输出有关出错信息。 cerr流中的信息只能在显示器输出。 当调试程序时,往往不希望程序运行时的出错信息被送到其他文件,而要求在显示器上及时输出,这时应该用cerr,cerr流中的信息是用户根据需要指定的。 clog流对象也是标准错误流,它是consolelog的缩写。 它的作用和cerr相同,都是在终端显示器上显示出错信息。 不同的是cerr不经过缓冲区,直接向显示器上输出有关信息,而clog中的信息存放在缓冲区中,缓冲区满后或遇endl时向显示器输出。 4.用什么方法来控制输入输出流中出现的错误 答: 为提高程序的可靠性,应在程序中检测I/O流的操作是否正常。 当检测到流操作出现错误时,可以通过异常处理来解决问题。 5.比较读写文本文件与二进制文件的异同。 答: 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。 例如,数5678的存储形式为: ASC码: 00110101001101100011011100111000 ↓ ↓ ↓ ↓ 十进制码: 5 6 7 8共占用4个字节。 ASCII码文件可在屏幕上按字符显示,例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。 由于是按字符显示,因此能读懂文件内容。 二进制文件是按二进制的编码方式来存放文件的。 例如,数5678的存储形式为: 0001011000101110只占二个字节。 二进制文件虽然也可在屏幕上显示,但其内容无法读懂。 C++系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。 输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。 因此也把这种文件称作“流式文件”。 6.随机读写是什么意思,常用于哪种类型的文件 答: 在C++中可以由程序移动文件指针,从而实现文件的随机访问,即可读写流中任意一段内容。 一般文本文件很难准确定位,所以随机访问多用于二进制文件。 7.文件流和字符串流有什么区别 答: 文件在C++看来是字符流或二进制流,文件流是以外存文件为输入输出对象的数据,所以文件流是与设备相关的。 可以把流的概念应用到字符串(String)上。 这样字符串就可以看作字符串流。 字符串流不是以外存文件为输入输出的对象,而以内存中用户定义的字符数组为输入输出的对象。 字符串流是与内存相关,所以也称内存流。 可以用输入输出操作来完成字符串流的操作。 三、编程题 1. x=468y= x=468y= x=+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 教程 面向 对象 分册 完整 答案