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

下载本文档

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

文档简介

1、第1章类和对象选择题8 C 9A 10 C二、阅读题1. x=2,y=32. x=2,y=3x!=y3.Cstatic:va1=0=1=2=4=4四、改错题#include <>#include <>class personpublic:person(int n,char* nam,char s)num=n;strcpy(name,nam);sex=s;cout<<"Constructor called."<<endl;person( )cout<<"Destructor called."<

2、;<endl;void display( )cout<<"num: "<<num<<endl;cout<<"name: "<<name<<endl; cout<<"sex: "<<sex<<endl<<endl;private:int num;char name10;char sex;);int main()(person s1(10010,"'Wang_li",'f);()

3、;person s2(10011,"Zhang_fun",'m');();return 0;)五、编程题5. 1#include <iostream>using namespace std;class CBox(public :CBox(double l=0,double w=0,double h=0);double area();double volume ();private :double lengh;double width;double high;);CBox:CBox(double l,double w,double h)(lengh

4、=l;width=w;high=h;)double CBox:area()(return 2*(lengh*width+lengh*high+width*high);)double CBox:volume ()(return lengh*width*high;)void main()(CBox box1(4,5,6);cout<<()<<endl;cout<<()<<endl;)#include <iostream> using namespace std; class CPoint public : CPoint(double a=

5、0,double b=0) x=a; y=b;)CPoint(CPoint & p) x=; y=;) void print() cout<<"("<<x<<","<<y<<")")private : double x,y;);class CLine public:CLine(double x1=0,double y1=0,double x2=0,double y2=0):p1(x1,y1),p2(x2,y2) )CLine(CPoint x,CPoint y):p1

6、(x),p2(y) ) CLine(CLine &lin) p1=; p2=;void DrawLine()(cout<<"Line form"();cout<<"to"();cout<<endl;void Linedel()(cout<<"delete line"<<endl;void move(CPoint &x,CPoint &y)(cout<<"move line"<<endl;p1=x;p2=y;p

7、rivate :CPoint p1,p2;void main()(CPoint point1(1,5),point2(5,8),point3(20,30),point4(40,50);CLine line1(point1,point2);CLine line2(2,3,8,12);();();(point3,point4);();line2=line1;();();#include <iostream> using namespace std; class CComplex(public:CComplex(double, double);CComplex(CComplex &

8、;c); <<endl;)char CString:GetAt(int nindex) const(if(nindex>1&&nindex<=GetLength()+1) return s nindex-1;elsereturn '0')void CString:Setat(int nindex,char ch)(if(nindex>1&&nindex<=GetLength()+1) s nindex-1=ch;)void CString:Print()(cout<<s<<endl;)i

9、nt CString:compare(CString& string)(if(strcmp(s,>0)return 1;else if(strcmp(s,<0)return -1;elsereturn 0;)int CString:compare(const char* psz)const(if(strcmp(s,psz)>0)return 1;else if(strcmp(s,psz)<0)return -1;else return 0;CString:CString() ( <<endl; elsecout<<"String

10、 isn't empty."<<endl;cout<<"下面是判断字符串c1清空"<<endl;();cout<<"清空后输出字符串c1:"<<" n"();cout<<"字符串已被清空"<<endl;cout<<"请按任意键继续"<<endl; cin>>b; D一、阅读程序题四、编程题#include <> #include<> #

11、define PAI class Circle ( public: Circle()r=0; Circle (double d)r=d; double area()return(PAI*r*r); void display1()cout<<" 桌子的面积:"<<area()<<endl; private: double r; class Table public: Table()heig=0; Table (double h) heig=h; void display2()cout<<" 桌子的高度:"&l

12、t;<heig<<endl; private: double heig;class Roundtable : public Circle,public Table public: Roundtable()strcpy(color," 白色"); Roundtable(double a,double b,char* c):Circle(a),Table(b)strcpy(color,c); void display () display1();display2();cout<<"桌子的颜色:"<<color<

13、<endl; private:char color20;void main()Roundtable s,"黑色");();如果Age在基类中被定义为私有的,SetAge(int n) 不能直接给 Age赋值,如果 Age是基类的公有成员变量,则可以直接赋值。class Animal public:Animal();int Age;class Dog:public Animal public:Dog();Void SetAge(int n) Age=n;#include <> class Rectanglepublic:Rectangle (double l

14、,double w)length=l,width=w double area()return length*width; void display1();private:double length;double width;);void Rectangle:display1()cout<<"长:"<<length<<endl;cout<<"宽:"<<width<<endl;class Cuboid:public Rectangle public:Cuboid (double L,do

15、uble w,double h):Rectangle(L,w)high=h,volume=L*w*high ; double vol()return area()*high; void show ();private:double high;double volume;void Cuboid:show() display1();cout<<"高:"<<high<<endl;cout<<"体积:"<<vol()<<endl;void main() Cuboid cub (10,20,3

16、0);();#include <>class Vehiclepublic:Vehicle():maxspeed(0),weight(0)Vehicle(double m,double w):maxspeed(m),weight(w);void run () cout<<"可以奔跑"<<endl; void stop () cout<<"可以停止奔跑"<<endl;private:double maxspeed;double weight;class Bicycle:virtual public

17、Vehicle public:Bicycle (double m,double w,double h):Vehicle(m,w),height(h) private: double height;class Motorcar : virtual public Vehiclepublic:Motorcar (double m,double w,double s):Vehicle(m,w),setnum(s)private:double setnum;class Motorcycle:public Bicycle,public Motorcarpublic:Motorcycle(double m,

18、double w,double h,double s):Bicycle(m,w,h),Motorcar(m,w,s), Vehicle(m,w);void main()Motorcycle s1(300,10,6,30);();();如果不把Vehicle设置为虚基类,会产生二义性问题。第3章多态性简答题3.1.1 哪些运算符可以重载几乎所有的运算符都可以重载,除了以下的几个运算符:.,:,:3.1.2 运算符重载后,优先级和结合性如何用户重新定义运算符,不改变原运算符的的优先级和结合性。同时运算符重载后,也不改变运算符的语法结构,即单目运算符只能重载为单目运算符,双目运算符只能重载为双目运算

19、符。3.1.3 编译程序如何选用运算符函数在每一种编译系统中,运算符实际上都对应一个函数,只是这种运算对用户具有透明性, 使用者并不知道函数的存在。运算符重载实际上是运算符函数的重载,所以运算符的重载实际上是函数的重载。编译程序对运算符重载的选择,遵循着函数重载的选择原则。当遇到不很明显的运算符 时,编译程序将去寻找参数相匹配的运算符函数。3.1.4 重载运算符有哪些限制(1)不可臆造新的运算符(2)坚持四个不能改变。不能改变运算符原有的优先级不能改变运算符原有的结合性不能改变运算符原有的语法结构不能改变运算符原有的操作数个数但允许改变运算符的返回类型(3) C+硼*定,运算符中,参数类型都是

20、内部类型时,不允许重载。":、*、-、:”这五个运算符不能重载。3.1.5 运算符重载必须遵循哪些原则运算符重载可以使程序更加简洁,使表达式更加直观,增强可读性。但是,运算符重载使用不宜过多,否则会带来一定的麻烦。运算符重载必须遵循以下原则:(1)重载运算符含义必须清楚。(2)重载运算符不能有二义性。填空题3.2.1 C+中多态性包括两种多态性:(1) 和 。前者是通过(3) 实现的,而后者是通过 (4) 和 (5)来实现的。答案:(1)编译时的(2)运行时的(3)函数和运算符的重载(4)类继承关系(5)虚函数3.2.2 纯虚函数定义时在函数参数表后加(1),它表明程序员对函数(2)

21、,其本质是将指向函数体的指针定为(3)。答案:(1) =0(2)不定义(3) NULL3.2.3在基类中将一个成员函数说明成虚函数后,在其派生类中只要 (1)、(2)和(3)完全一样就认为是虚函数,而不必再加关键字(4)。如有任何不同,则认为是 (5)而不是虚函数。除了非成员函数不能作为虚函数外,(6) 、(7)和(8) 也不能作为虚函数。答案:(1)同虚函数名(2)同参数表(3)同返回类型。如基类中返回基类指针,而派生类中返回派生类指针是允许的(4) virtual(5)重载(6)静态成员函数(7)内联函数(8)构造函数 第三大题答案: 3. 1答案: #include<> #i

22、nclude<> class CStudent (char name20;char nativeplace20;char code30; int age;float score;public :CStudent(char *, char*,char*,int ,float);CStudent(CStudent &s);void display();float operator+(CStudent s1););CStudent:CStudent(char *name, char*native,char*code,int age,float score) ( strcpy(th

23、is->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=;) void CStudent:display() ( cout<&l

24、t;name<<""<<nativeplace<<""<<code<<""<<age<<"<<score<<endl; ) float CStudent:operator +(CStudent s1) (return this->score+;void main()(CStudent w("whl","zhengzhou","",30,90);();CS

25、tudent c("ctm","zhengzhou","",30,90);();cout<<w+c<<endl;3. 2答案:#include<>#include<>#include<> class CTriangle(float a,b,c;public:CTriangle(float a,float b,float c) (this->a=a;this->b=b;this->c=c;float GetArea()(float t=(a+b+c)/2;re

26、turn sqrt(t*(t-a)*(t-b)*(t-c);float operator +(CTriangle t) (return this->GetArea()+();void main()(CTriangle tr1(3,4,5),tr2(6,8,10);cout<<tr1+tr2<<endl;3. 3答案:#include<>class BaseClass(public:virtual void f1()cout<<"BaseClass:f1()"<<endl;void f2()cout<&l

27、t;"BaseClass:f2()"<<endl;class DerivedClass: public BaseClasspublic:void f1()cout<<"DerivedClass:f1()"<<endl;void f2()cout<<"DerivedClass:f2()"<<endl;void main()DerivedClass d1;BaseClass* Bptr;DerivedClass* Dptr;Bptr=&d1;Bptr->f1();B

28、ptr->f2();Dptr=&d1;Dptr->f1();Dptr->f2();习题四一、选择题1. D 2 , A 3 . B 4.C 5. C 6. C 7. A二、简答题1 .什么叫做流流的提取和插入是指什么I/O流在C+中起着怎样的作用答:流是一种抽象,它负责在数据的生产者(程序 /文件)和数据的消费者(文件/程序)之 间建立联系,并管理数据的流动。一般意义下的读操作在流数据抽象中被称为(从流中)提取,写操作被称为(向流中)插入。完成数据从动态(内存)到静态(外存)的转换,或着是从静态(外存)到动态(内存)的 转换。2 .什么是字节流、字符流和二进制流答:根

29、据对字节内容的解释方式,字节流分为字符流(也称文本流)和二进制流。字符流将字节流的每个字节按ASCH字符解释,它在数据传输时需作转换,效率较低。例如源程序文件和文本文件都是字符流。由于ASCH字符是标准的,所以字符流可以直接编辑,显示或打印,字符流产生的文件通行于各类计算机。二进制流将字节流的每个字节以二进制方式解释,它在数据传输时不作任何转换,故效率高。但各类计算机对数据的二进制存放格式各有差异,且无法人工阅读,故二进制流产生的文件可移植性较差。3 . cerr和clog作用是什么有何区别答:对于输入提示信息或输出结果而言,cerr和clog的用法相同,但作用不同。cerr的作用是向标准错误

30、设备(standard error device)输出有关出错信息。cerr流中的信息只能在显示器输出。当调试程序时,往往不希望程序运行时的出错信息被送到其他文件,而要求在显示器上及时输出,这时应该用cerr , cerr流中的信息是用户根据需要指定的。clog流对象也是标准错误流,它是console log 的缩写。它的作用和cerr相同,都是在终端显示器上显示出错信息。不同的是cerr不经过缓冲区,直接向显示器上输出有关信息,而 clog中的信息存放在缓冲区中,缓冲区满后或遇endl时向显示器输出。4 .用什么方法来控制输入输出流中出现的错误答:为提高程序的可靠性,应在程序中检测I/O流的

31、操作是否正常。当检测到流操作出现错 误时,可以通过异常处理来解决问题。5 .比较读写文本文件与二进制文件的异同。答:从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数 5678的存储形式为:ASM:00110101 00110110 00110111 00111000JJ J J十进制码:5678共占用4个字节。ASCII码文件可在屏幕上按字符显示,例如源程序文件就是 ASCII文件,用DOST令TYPE可显示文件的内容。由于是按字符显示,因此能读懂文件内容。二进制文

32、件是按二进制的编码方式来存放文件的。例如, 数5678的存储形式为:00010110 00101110只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C+舔统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。 因此也把这种文件称作“流式文件”。6 .随机读写是什么意思,常用于哪种类型的文件答:在C+用可以由程序移动文件指针,从而实现文件的随机访问,即可读写流中任意一段 内容。一般文本文件很难准确定位,所以随机访问多用于二进制文件。7 .文件流和字符串流有什么区别答:文件在C+看来是字符流或二进

33、制流,文件流是以外存文件为输入输出对象的数据,所 以文件流是与设备相关的。可以把流的概念应用到字符串(String )上。这样字符串就可以看作字符串流。字符串流不是以外存文件为输入输出的对象,而以内存中用户定义的字符数组为输入输出的对象。 字符串流是与内存相关,所以也称内存流。可以用输入输出操作来完成字符串流的操作。三、编程题x=468y=x=468 y=x=+468*y=*2生成一个名称为文件,内容: This is test data3 .源程序。#include <iostream>#include <iomanip>using namespace std;int

34、 main()for(int n=8;n>0;n-)cout<<setw(20-n)<<"*"<<setfill('*')<<setw(2*n-1)<<""<<setfill('')<<setw(20-n)<<endl;return 0;4 .源程序。#include<>void main(void)char f2256;cout<<"请输入目标文件名"cin>>f2

35、;ofstream out(f2);if(!out) cout<<"n不能打开目标文件:"<<f2; return; int i=0;while(i<21)out<<i;i=i+1;();cout<<"n 操作完毕! n"5 .源程序。#include<>void main(void)ofstream out("",ios:out|ios:binary);if(!out)cout<<"n"return;for(int i=1;i<100;i+=2)(char*)&i,sizeof(int);();cout<<"n 程序执行完毕! n")6 .源程序。#include<>void main() (char a50;char b50;istrstream sin(a);ostrstream sout(b,sizeof(b);(a,sizeof(a);char ch=' 'int x;whi

温馨提示

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

评论

0/150

提交评论