C++考试试题重点_第1页
C++考试试题重点_第2页
C++考试试题重点_第3页
C++考试试题重点_第4页
C++考试试题重点_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、一、概念题1类和对象有什么区别和联系?类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。类是对某一类对象的抽象,而对象是某一种类的实例。2什么是类的实现?将类所有未编写函数体的成员函数在类体外全部编写出来。3. this指针的概念是什么?类中所有的成员函数(静态成员函数除外)都隐含了第一个参数,这个隐含的第一个参 数就是this指针,在成员函数的实现代码中, 所有涉及对类的数据成员的操作都隐含为对this指针所指对象的操作。4. 为什么要引入构造函数和析构函数?构造函数的作用是为类对象的数据成员赋初值,构造函数在定义类对象时由系统自动 调用;在一个对象死亡或

2、者说退出生存期时,系统会自动调用析构函数,因此可以在析构函数定义中,设置语句释放该对象所占用的一些资源。5. 什么时候需要自定义拷贝构造函数?若程序员没有定义拷贝构造函数,则编译器自动生 成一个缺省的拷贝构造函数,它可能会产生什么问题?当有用一个已经存在对象创建一个同类型的新对象的需求时。当对象含有指针数据成员,并用它初始化同类型的另一个对象时,默认的拷贝构造函数只能将该对象的数据成员复制给另一个对象,而不能将该对象中指针所指向的内存单元也复制过去。这样,就可能出现同一内存单元释放两次,导致程序运行出错。6. 什么是堆对象?创建和回收堆对象的方法是什么?堆区用来存放在程序运行期间,根据需要随时

3、建立的变量(对象),建立在堆区的对象称为堆对象,当堆对象不再使用时, 应予以删除,回收所占用的动态内存。 创建和回收堆对 象的方法是使用 new和delete运算符。7. 为什么需要静态数据成员?静态数据成员的定义和初始化方法是什么?定义静态数据成员是为了同一个类的不同对象之间共享公共数据成员;用关键字static可以把数据成员定义成静态数据成员;在定义的类被使用前, 要对其中的静态数据成员进行初始化,初始化时不必添加关键字static。&什么是静态成员函数?静态成员函数和非静态成员函数有什么区别?用关键字static可以把这成员函数定义成静态成员函数。静态成员函数只能访问类的静态数据成员,不

4、能访问类的非静态数据成员。因为静态成 员函数是类的成员,不涉及具体的对象,访问静态成员函数常用类名引导。 非静态成员函数可以访问类的静态数据成员,也可以访问非静态数据成员。因为类的静 态成员总是存在的。静态成员函数和非静态成员函数,最主要的差别是非静态成员函数隐含了第一个参数 this指针,静态成员函数不含 this指针。9. 结构struct 和类class 有什么异同?struct和class都可以定义类,但是缺省访问权限说明时,struct的成员是公有的,而class 的成员是私有的。在 C+中,struct可被class代替。10. 比较类的三种继承方式public、protected

5、、private 之间的区别。采用public公有派生,基类成员的访问权限在派生类中保持不变,即基类所有的公有或保护成员在派生类中仍为公有或保护成员。public派生最常用,可以在派生类的成员函数中访问基类的非私有成员,可通过派生类的对象直接访问基类的公有成员。采用private私有派生,基类所有的公有和保护成员在派生类中都成为私有成员,只允许 在派生类的成员函数中访问基类的非私有成员。private派生很少使用。采用protected保护派生,基类所有的公有和保护成员在派生类中都成为保护成员,只允许在 派生类的成员函数和该派生类的派生类的成员函数中访问基类的非私有成员。11 派生类构造函数和

6、析构函数执行的次序是怎样的?派生类构造函数的执行次序:首先,调用基类构造函数,调用顺序按照它们被继承时声明的基类名顺序执行;其次,调用内嵌对象构造函数,调用次序为各个对象在派生类内声明的顺序;最后,执行派生类构造函数体中的内容。派生类析构函数执行过程与构造函数执行过程相反。即当派生类对象的生存期结束时, 首先调用派生类的析构函数,然后调用内嵌对象的析构函数,再调用基类的析构函数。12. 什么叫虚基类?有什么作用?在多重继承中,如果多条继承路径上有一个公共的基类,则在这些路径的汇合点上的 派生类会产生来自不同路径的公共基类的多个拷贝,如果用virtual把公共基类定义成虚基类,则只会保留公共基类

7、的一个拷贝。引进虚基类的目的是为了解决二义性问题,使得公共基类在它的派生类对象中只产生一个基类子对象。13. 什么是多态性,在 C+中是如何实现多态的?多态是指同样的消息被不同类型的对象接收时导致完全不同的行为,是对类的特定成员函数的再抽象。C+支持的多态有多种类型,重载 (包括函数重载和运算符重载 )和虚函数是 其中主要的方式。14. 什么是抽象类,其有何作用?抽象类的派生类是否一定要给出纯虚函数的实现?含有纯虚函数的类称为抽象类。抽象类的主要作用是通过它为一个类族建立一个公共的接口,使它们能够更有效地发挥多态特性。抽象类声明了一组派生类共同操作接口的通用语义,而接口的完整实现,即纯虚函数的

8、函数体,要由派生类自己给出,抽象类只能作为基类被继承使用。抽象类的派生类不一定要给出纯虚函数的实现,没有给出纯虚函数的实现的派生类仍然还是抽象类。15. 在C+中能否声明虚构造函数,为什么?能否声明虚析构函数,有什么作用?在C+中不能声明虚构造函数。多态是不同的对象对同一消息有不同的行为特性,虚函数作为运行过程中多态的基础,主要是针对对象的,而构造函数是在对象产生之前运行的, 因此虚构造函数是没有童义的。在C+中可以声明虚析构函数。析构函数的功能是在该类对象消亡之前进行一些必要的 清理工作,如果一个类的析构函数是虚函数,那么,由它派生而来的所有子类的析构函数也是虚函数。析构函数设置为虚函数之后

9、,在使用指针引用时可以动态联编,实现运行时的多态,保证使用基类的指针就能够调用适当的析构函数对不同的对象进行清理工作。二、填空题1. 拷贝构造函数使用作为参数初始化创建中的对象。2. 在C+中,对于构造函数和析构函数来说, 是可以重载的,而 是不可以重载的。3. B类中包含一个 A类的成员a,则生成B类的对象时构造函数的调用顺序为 。4类的每一个成员函数(静态成员函数除外)都有一个隐含的参数,叫做。假设类名为A,则该参数的类型为 。5. 类的静态成员分为 和。6. 声明友元的关键字是。7. 如果类A继承了 B,则类A称为,类B称为。&派生类对基类的继承有三种方式: 、和。9如果只想保留公共基类

10、的一个拷贝,就必须使用关键字 把这个公共基类定义为虚基类。10. 派生类的成员有两种来源,即 和。11. 要想访问基类的 private成员变量,只能通过基类提供的 进行间接访问。12. 重载运算符应仍保持其原有的操作数个数、结合性和 。13. 对于双目运算符,若重载为类的成员函数,有 个参数;若重载为友元函数,则有个参数。14. 后缀+重载为类的成员函数(设类名为A)的形式为,重载为类的友元函数(设类名为A)的形式为。15. 设有一时间类 Time,现欲用成员函数方法重载运算符+,实现一个时间与一个整数的相加运算,所得结果为一个新时间,则成员函数的声明语句为 。16. C+语言支持的两种多态

11、性分别是编译时的多态性和 的多态性。17. 联编有两种方式,即 和。18. 抽象类必须至少包含一个 。21. Windows系统中消息的主要类型有 、和。22 .当用户在窗口中按下鼠标左键时,Win dows系统就会自动发送 消息给该窗口,如果程序要对此消息作出反应,则程序中应包含类似 函数。23. OnDraw()函数有一个指向 类的指针参数,通过该参数可以直接向视图输出。24. 应用程序将任何东西画到设备中之前,必须明确索取一个 。25. 对话框分为 和两种。26 .对话框的初始化工作一般在 和中完成。27. MFC中公用对话框有 、和。28. 视图派生类可以选择 类作其基类,可以实现文本

12、编辑功能。29 .对于文档类,数据成员的初始化工作是在 函数中完成的。30. 如果修改了文档类中的数据,并要求重新显示,要用 或发出重画消息,引起对OnDraw()的调用。31. 当执行cout语句输出endl数据项时,将使C+显示输出屏幕上的光标从当前位置移动到 的开始位置。32. 假定x和y为整型,其值分别为16和5,则a/y和double(x)/y的值分别为 和33. strlen( apple”)的值为。34. C+程序运行时的内在空间可以分为全局数据区,堆区,栈区和 区。35. 假定a是一个一维指针数组,则a+i所指对象的地址比 a大字节。36. 如果一个派生类只有一个唯一的基类,则

13、这样的继承称为 。37. 假定AA是一个类,“ AA * abc()c on st; ”是该类中的一个成员函数的原型,在该函数体中 向*this或其成员赋值。38. 假定用户没有给一个名为AB的类定义构造函数,则系统为其定义的构造函数为 39. 假定用户为类AB定义了一个构造函数“AB(int aa)a=aa; ” ,该构造函数实现对数据的初始化。40. 作为类的成员函数重载地个运算符时,参数表中只有一个参数,说明该运算符有 个操作数。41. C+有两种联编方式,其中在程序编译时的联编叫做 联编42. 虚函数可以是另一类的 函数43. 定义虚函数需要用关键字44. 将函数void vf()”定

14、义为纯虚数的格式是virtual void vf()45. 拥有纯虚函数的类就是 ,该类不能产生类的实例46. 派生类没有重载基类的纯虚函数,则此派生类也是 47. 有如下程序#in elude class CSAI_Apublic:virtual void fun( )coutA;;class CSAI_B:public CSAI_Apublic:virtual void fun( )CSAI_A:fu n();coutfu n();delete p;执行这个程序的输出结果是()答案: 48. 有如下程序#in cludeconst int T=8;void mai n()int i,s=0

15、;for(i=1;i=T;i+)s+=i*i;couts;coute ndl;运行结果:49. 有如下程序in t ff(i nt x,i nt y)int乙coutx+y z;if(x+y=z) retur n 1;else return 0;函数功能:50. 有如下程序char *f(char *s)int n=strle n( s);char * r=new char n+1;for(i nt i=0;i =a & si重载为类CSAI的友元函数的格式是:friend instream& operator 56. this 指针破坏类的封装性。57. 通过指向基类的指针调用派生类对象的函

16、数时,采用 调用。58. 下面是对按从小到大排列的有序数组an中进行二分查找x的算法,若查找成功返回该元素的下标,否则返回-1。int Binn arySearch(i nt a,i nt n ,i nt x)int low=0,high=n-1;定义并初始化区间下界和上界变量in t mid;定义保存中点元素下标的变量while(low=high)mid=(low+high)/2;if(x=amid) else if(xamid)high=mid-1;else return -1;59. 请补充完整如下的类定义:#in cludeclass Achar *a;public:A()a=O;定义

17、无参构造函数,使A的值为空A(char *aa)a= ;进行动态存储分配strcpy(a,aa);用aa所指字符串初始化a所指向的动态存储空间 ;定义析构函数,删除 a所指向的动态存储空间;三、编程题1创建一个Employee类,该类中有字符数组表示姓名、街道地址、市、省和邮政编码。把表示构造函数、ChangeName函数、Display函数的函数原型放在类定义中,构造函数初始化每个成员,Display函数把完整的对象数据打印出来。其中的数据成员是保护的,函数是 公共的。2. 设计并测试类 Point,其数据成员是直角坐标系的点坐标。友元函数distanee用来计算 两点间的距离。3. 定义一

18、个 Rectangle 类,有宽 width、长length 等属性,重载其构造函数Rectangle、Recta ngle(i nt width , int len gth)。4. 编写一个程序,设计一个Cdate类,它应该满足下面的条件。用这样的格式输出日期:日-月-年。 输出在当前日期上加两天后的日期。设置日期。5. 按照下面函数原型语句编写一个递归函数求出并返回数组a中n个元素的平方和。int f(int a,int n)6. 根据下面类中Sum函数成员的原型和注释写出它的类外定义。class AAint *a;int n;int MS;public:void Ini tAA(i nt

19、 aa,i nt nn ,i nt ms) if(nn ms)coutError!e ndl;exit(1);MS=ms;a=n ew in tMS;for(i nt i=0;i n;i+)ai=aai;int Sum();求出并返回数组 a中前n个元素之和;7. 定义一个基类有姓名、性别、年龄,再由基类派生出教师类和学生类,教师类增加 工号、职称和工资,学生类增加学号、班级、专业和入学成绩。&下列Shape类是一个表示形状的抽象类,area()为求图形面积的函数,total() 则是一个 通用的用以求不同形状的图形面积总和的函数。请从Shape类派生三角形类(Triangle)、矩形类(Re

20、ctangle ),并给出具体的求面积函数。class Shapepublic:virtual float area()=0;float total(Shape *s,i nt n)float sum=0.0;for(i nt i=0;iarea(); return sum;9.声明一个Shape类(形状)基类,它有两个派生类:Circle (圆)和Square (正方形),要求如下。 根据给出的圆心坐标计算圆的面积。根据给出的正方形中心坐标和一个顶点坐标计算该正方形的面积。提示:Shape类的数据成员包括中心的坐标,Circle 类和Square类由Shape类派生,Circle类新增一个数

21、据成员,即圆的半径,Square类新增两个数据成员,即顶点坐标。明该对话框对象已不存在了。二、填空题1引用2 构造函数析构函数3. A() , B()4. this, A *5 静态数据成员静态成员函数6. friend7. 派生类基类8. public、protected、private9. virtual10. 基类派生类自身11. 成员函数12. 运行时13. 静态联编,动态联编14. public vehicle public vehicle15. 基类A中的成员函数.派生类B中的成员函数.16. C类 B类17. 抽象函数18. 优先级 2. 1219. A operator +(i

22、 nt) friend A operator +(A &,i nt)20. Time Time:operator +(i nt)21. 输入消息、控制消息、系统消息、用户消息22. WM_LBOTTONDOWNOnLButtonDown23. CDC24. 设备环境25. 模态对话框非模态对话框26. 构造函数OnlnitDialog()函数27. CColorDialog、CFileDialog、CFindReplaceDialog、CFontDialog、CPrintDialog28. CeditView29. OnNewDocument()30. Invalidate()或 Invali

23、dateRect()31. 下一行32. 3 和 3.233. 534. 代码35. 4 X36. 单继承37. 不能够38. AB()39. a40. 241. 静态42. 友元43. virtual44. =045. 抽象类46. 抽象类47. AB48. 1 5 14 30 55 91 140 20449. 输入2个整数相加的结果,结果正确返回1,否则返回050. 将字符串中的小写字母转换为大写51. 非多态调用52. 第一操作数53. operatro double。54. operator +=(x,y)55. (istream & ,CSAI &)56. 不能57. 多态58. r

24、eturn mid low=mid+159. new charstrle n(aa)+1 A()delete a;三、编程题1.#in clude #in clude class Employeeprotected:char n ame20;char address100;char city20;char provi nce20;char zipcode10;public:Employee(char *nm ,char *addr,char *city, char *prov, char *zip); void Chan geName(char * n ewName);char * Displ

25、ay(char * buffer);Employee:Employee(char *nm, char *adr, char *cit, char *prov, char *zip) strcpy( name ,nm);strcpy(address,adr);strcpy(city,cit);strcpy(prov in ce,prov);strcpy(zipcode,zip);void Employee:Cha ngeName(char * n ewName)strcpy (n ame, n ewName);char * Employee:Display(char *buffer)strcpy

26、(buffer, n ame);strcat(buffer, address);return buffer;2.#in clude #in clude class Pointprivate:float x, y;public:Poin t(float xx, float yy) x=xx; y=yy; float GetX() return x; float GetY() return y; friend float distance(Point&, Point&);float dista nce(Poi nt& a, Poi nt& b)float dx = a.x - b.x;float

27、dy = a.y - b.y;cout用友元函数distance().显示两点的坐标 :n ;couta.x, a.yb.x, b.ye ndl;retur n sqrt(dx*dx+dy*dy);void mai n()float d;Point p1(10.5, 20.5), p2(2.5, 6.5);d=dista nce(p1, p2);cout 两点的距离 : d = de ndl;ci n.get();3.#in cludeclass Recta nglepublic:Recta ngle();Recta ngle(i nt width,i nt len gth);Recta ng

28、le()int GetWidth()co nstreturn m_width;int GetLength()return mength;private:int m_width;int m_le ngth;Recta ngle:Recta ngle()m_width=5;m_len gth=10;Recta ngle:Recta ngle(i nt width,i nt le ngth)m_width=width;m_len gth=le ngth;int mai n()Recta ngle rect1;coutrect1 width : rect1.GetWidth()endl;coutrec

29、t1 length : rect1.GetLength()endl; int a,b;cout a;cout b;Recta ngle rect2(a,b);coutnrect2 width : rect2.GetWidth()endl; coutrect2 length : rect2.GetLength()endl; return 0;4.#in cludeclass Cdateint year,m on th,day;int y1,m1,d1;public:void setdate(i nt y,i nt m,i nt d)year=y ;mon th=m;day=d;void show

30、()cout当前日期: day-month-yearendl; cout两天后日期:d1-m1-y1endl;void datetwo() 加一天后的年月曰d1=day;y1=year;m1= mon th;for(i nt i=0;i2;i+)d1+;switch(dl)case 29:if(!(mo nth=2 &( year%4OO=O|year%4=O&year%1OO!=O) m1= 3;d1=1;break;case 30:if(mo nth=2 &( year%4OO=O|year%4=O& year%1OO!=O) m1= 3;d1=1;break;case 31:if( mo

31、n th=4|m on th=6|m on th=9|m on th=11) m1=m1+1;d1=1;break;case 32: m1= m1+1;d 1= 1;if(mo nth=12)y1= y1+1;m1=1;break;void mai n()Cdate d;int y,m,d1;cout md1;d.setdate(y,m,d1); 加一天d.setdate(y,m,d1); 再加一天d.datetwo();d.show();5. 程序如下:int f(int a,int n)if(n=1)return a0*a0;else return an-1*a n-1+f(a, n-1)

32、;6. 程序如下:int AA:Sum()int sum=0;for(i nt i=0;i n ;i+)sum+=ai;return sum ;7.#in clude#in clude#i ncludeclass base定义一个基类protected:char name20; 姓名char sex3;性别int age;年龄;/基类派生岀教师类class teacher:public base int sno;工号char zc20;/职称double wages;工资;class stude nt :public base int sno;char bj1O;char zy10;/基类派生

33、岀学生类学号班级专业double score;入学成绩;&class Shapepublic:virtual float area()=0;float total(Shape *s,i nt n)float sum=0.0;for(i nt i=0;i area(); return sum;class Trian gle:public Shapepublic:Tria ngle(double h,double w)H=h;W=w;double area() con streturn H*W*0.5; private:double H,W;class Recta ngle:public Shap

34、epublic:Recta ngle(double h,double w)H=h;W=w; double area()co nstreturn H*W; private:double H,W;9.#in cludeclass Shapepublic:virtual double GetArea()=0;;class Circle:public Shapedouble radius;public:Circle(double r):radius(r)double GetArea()return 3.1416*radius*radius; ;class Square:public Recta ngl

35、epublic:Square(double l):Recta ngle(l,l);int mai n()Recta ngle r(3.5,4.0);Circle c(2.0);Square s(5.0);coutr.GetArea()e ndl;coutc.GetArea()e ndl; couts.GetArea()e ndl;return 0;一、选择题1类的实例化是指(C )A、定义类B、指明具体类2、关于类和对象的说法不正确的是A、对象是类的一个实例C、一个对象只属于一个具体类3、下面说法正确的是(C、创建类的对象BB、D、D、调用类的成员)一个类只能有一个对象类与对象的关系和数据类型

36、与变量的关系相似B )。A、内置函数在运行时是将该函数的目标代码插入每个调用该函数的地方B、内置函数在编译时是将该函数的目标代码插入每个调用该函数的地方C、类的内置函数必须在类体内定义D、 类的内置函数必须在类体外通过加关键字inline定义4、对于任意一个类,析构函数的个数最多为( A ) D、任意多个A、1B、2C、和构造函数个数一样5、 在下面的类定义中,错误的语句是(D )class samplepublic :sample (int val); (1)sample( );/ ( 2)private:int a=2.5 ; / (3)sample ( ); / (4);D、(3)A、(

37、1) (2) ( 3) (4)B、(1) (2) ( 3)C、(2)D )。构造函数在定义类变量时自动执行C、构造函数无任6、有关构造函数的说法不正确的是(A、构造函数名字和类的名字一样何函数类型D、构造函数有且只有一个7、不属于成员函数的是(A、静态成员函数B、友元函数B )。C、构造函数D、析构函数D )B、D、8、已知类A是类B的友元,类B是类C的友元,则(A、类A 一定是类C的友元C、类C的成员函数可以访问类B的对象的任何成员的对象的任何成员9、 在建立类对象时(A )A、只为每个对象分配用于保存数据成员的内存 于保存函数员的内存C、为所有对象的数据成员和函数成员分配一个共享的内存 员

38、和函数成员同时分配不同的内存10、下列说法错误的是( B )A、封装是将一组数据和这组数据有关的操作组装在一起 要确定接口C、封装要求对象应具有明确的功能 以像一个部件一样用在各种程序中11、 要禁止修改指针 p本身,也要禁止修改p所指向的数据,这样的指针应定义为(A、const char *p= abed”;B、char const *p= abed”;C、char *const p= abed”;C 一定是类A的友元A的成员函数可以访问类 B只为每个对象分配用为每个对象的数据成封装使对象之间不需封装使得一个对象可D )。D、const char *const p= abed;12、下面有关析构函数正确的是(A、一个类只能定义一个析构函数B、析构函数的名字与类名可以不同C、析构函数只能定义在类内D、析构函数至少包含一个参数13、 下列运算符中,不能重载的是(BA、!B、sizeof ()14、下列关于运算符重载的说法,正确的是A、可以改变参与运算的操作数个数A )。)C、newD、 =D )。可以改变运算符原来的优先级C、可以改变运算符原来的结合性D、不能改

温馨提示

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

最新文档

评论

0/150

提交评论