C-++-复习试卷及答案_第1页
C-++-复习试卷及答案_第2页
C-++-复习试卷及答案_第3页
C-++-复习试卷及答案_第4页
C-++-复习试卷及答案_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、一、选择题(每题2分,20题,共40分)1 下列关键字中,( )不是类定义中使用的关键字。A class B. public C. switch D. private2关于友元函数的描述中,错误的是( )。A友元函数说明在类体内B友元函数不是成员函数C友元函数必须用对象来引用D友元函数可直接访问类中私有成员3下列关于对象引用的描述中,错误的是( )。A对象引用不能作数组元素B对象引用可作为函数的参数和返回值C定义对象引用时需用同类对象的地址值进行初始化 D对象引用成员表示与对象相同4下列函数参数默认值定义错误的是() A. Fun(int x, int y=0) B. Fun(int x =

2、100) C. Fun(int x = 0, int y) D. Fun(int x = f( ) (假定函数f()已经定义)class B: public A int k;public:void make()k=m;k=i*j; ;5若类A和类B的定义如下:class A int i,j;protected:int m;public:int geti()return i;则上述中, ( )是非法的表达式。 A. void make(); B. int k; C. k=m; D. k=i*j;6下面类的定义,有( )处错误.class MyClassint i=0;public:void My

3、Class();MyClass(int n);A. 1 B. 2 C. 3 D. 47下列是构造函数的特点,( )是错误的。A.构造函数是一种成员函数,它具有一般成员函数的特点。B.构造函数的名称与其类名相同。C.构造函数必须指明其类型。D.一个类中可以定义一个或多个构造函数。8已知:p是一个指向类A数据成员m的指针,a是类A的一个对象。在给m赋值为5的下列表达式中,( )是正确的。A. a.p=5 B. a->p=5 C. a.*p=5 D. *a.p=59关于静态成员的描述中,( )是错误的。A.静态成员可分为静态数据成员和静态成员函数B.静态数据成员定义后必须在类体内进行初始化C.

4、静态数据成员初始化不使用其构造函数D.静态成员函数中不能直接引用非静态成员10下列关于new运算符的描述中,错误的是( )。A. new运算符组成的表达式的值是地址值B. 创建对象时不调用构造函数C.用它创建的对象须用delete来删除D.可用它来创建动态的对象和对象数组 11下列对派生类的描述中,( )是错误的。A.一个派生类可以作为另一个派生类的基类。B.派生类至少应有一个基类。C.基类中成员访问权限继承到派生类中都保持不变。D.派生类的成员除了自己定义的成员外,还包含了它的基类成员。12派生类的对象对它的哪一类基类成员是可以访问的( ) A.公有继承的基类的公有成员B.公有继承的基类的保

5、护成员C.公有继承的基类的私有成员D.保护继承的基类的公有成员13关于基类和派生类的描述中,错误的是( )。A基类和派生类间是包含关系 B派生类中可以定义自己的成员 C基类成员在派生类中的访问权限与继承方式有关D派生类中继承了基类中的全部成员14下列对运算符重载的描述中,正确的是( )。A. 运算符重载可以改变结合性 B.运算符重载可以改变优先级C.运算符重载可以改变操作数的个数 D.运算符重载不改变优先级和结合性157.p具有指向CSample类的指针类型; 执行语句 p = new CSample5 会使CSample类构造函数执行 ( )次.A. 0B. 1C. 5D. -116要让一个

6、类中的所有对象具有共同的数据,请使用()。A. 常数成员变量 B. 私有数据成员 C. 静态数据成员 D. 以上都是17给定一个基类Person和一个派生类 Man,下面哪个代码片段是不正确的。()A.Person pp; Man *mm=&pp;BMan aa; Person *bb=&aa;C. Man jj; Person &dd=jj;D. Person pp; Man aa; pp=aa;18在下列打开磁盘文件的访问方式常量中,以读方式打开文件时应选用( )。A. in B. out C. ate D. app19下列关于抽象类的描述中,错误的是( )。A.抽

7、象类中至少有一个纯虚函数B.抽象类不能定义对象C.抽象类可以定义对象引用D.抽象类的派生类一定不再是抽象类20控制输出格式的控制符中,( )是设置输出宽度的。A. ws B. ends C. setfill() D. setw()得分二、判断题(每题1分,15题,共15分)1用class定义的类中,默认的访问权限是公有的。( )2如果一个类中没有定义任何构造函数,则该类的对象便无法初始化。( )3在c+中,只能重载已有的运算符。( )4友元函数是成员函数,它可以访问类中私有成员。( )5对象数组的元素必须是同一个类的对象。( )6子对象的初始化可以不放在该类的构造函数中。( )7运算符new可

8、以创建变量或对象, 也可以创建数组。( )8基类中私有成员派生类不可直接访问。( )9公有继承方式下,基类中公有成员和保护成员在派生类中仍然是公有的和保护的。( )10私有继承方式下,基类中公有成员和保护成员在派生类中都是私有的。( )11派生类的构造函数中显式或隐含的包含着直接基类的构造函数。( )12派生类的对象不可以给基类对象赋值。( )13派生类的构造函数中应包含直接基类的构造函数。( )14基类中的保护成员在其派生类中可以访问,而派生类对象不可访问。( )15、C+中使用const定义常量。( )得分三、填空题(每空1分,10空,共10分)1面向对象的程序设计区别于面向过程的程序设计

9、,最大的特点是引入了_和_的概念。2面向对象的三大特性:_、_、_。3C+中虚基类的引入,其真正目的是_。4C+中函数的重载有两种,一种是_、一种是_。5在多继承方式下,处于同一层次的各基类构造函数的执行顺序取决于_。6this指针是一个隐含于每一个类的成员函数的特殊指针,该指针所指向的对象是_;得分四、写出程序运行结果(每题5分,4题,共20分)1#include <iostream.h>#include <string.h>class Apublic:A(int i=0) a=i+b; void Print(); A() cout<<"Dest

10、ructorn" private:int a;static int b; ;void A:Print() cout<<'('<<a<<','<<b<<')'<<endl; int A:b=5; void main()A array3; array0=A(1); array1=A(3);A *parr3; for(int i=0;i<3;i+) parri=&arrayi;for(i=0;i<3;i+) parri->Print();2#in

11、clude <iostream.h>class Studentpublic:Student(int i=0,double j=0) num=i;score=j; void print() cout<<num<<,<<score<<endl; friend void fun(Student &rs);private:int num;double score;void fun(Student &rs) rs.num=1100;rs.score=80;rs.print();void main() Student s1(100

12、2,50),s2; s1.print(); fun(s2);3 #include<iostream>using namespace std;class Afriend double count(A&);public:A(double t, double r):total(t),rate(r)private:double total;double rate;double count(A&a)a.total+=a.rate*a.total;return a.total;int main(void )A x(100,0.5),y(50,0.1);cout<<c

13、ount(x)<<','<<count(y)<<'n'cout<<count(x)<<'n'return 0;4#include <iostream >using namespace std;class BASEchar c; public: BASE(char n):c(n) virtual BASE()cout<<c<<endl;class DERIVED:public BASE char c; public:DERIVED(char n):BAS

14、E(n+1),c(n)DERIVED()cout<<c<<endl;int main(void) DERIVED('X'); return 0; 得分五、程序设计题(15分,第1题5分,第2题10分)1有两个长方体,其长、宽、高分别为:(1)12,25,30;(2)15,30,20。分别求它们的体积。编写一个程序,使用类来定义长方体,在类中使用带参数的构造函数,并在主函数中,完成两个长方体的实现。2编写程序:定义抽象基类Shape,由它派生出五个派生类:Circle(圆形)、Square(正方形)、 Rectangle( 长方形)、Trapezoid (

15、梯形)和Triangle (三角形),用虚函数分别计算各种图形的面积,并求出它们的和。要求用基类指针数组。使它的每一个元素指向一个派生类的对象。 注:主函数中定义如下对象Circle circle(12.6); Square square(3.5); Rectangle rectangle(4.5,8.4);Trapezoid trapezoid(2.0,4.5,3.2);Triangle triangle(4.5,8.4); 一、 选择题(每题2分,20题,共40分)1-5 CCCCD 6-10CCCBB 11-15CADDC 16-20CABDD二、1-5FFTFT 6-10FTTTT 1

16、1-15TFTTT1、类 、对象2、封装、继承、多态3、解决多重继承下的二义性问题4、函数参数个数不同、函数参数类型不同5、声明基类的顺序6、当前正在操作类的成员的对象四、写出程序运行结果(每题5分,4题,共20分)1、DestructorDestructor(6,5)(8,5)(5,5)DestructorDestructorDestructor2、1002,501100,803150,552254. X Y六、程序设计题(15分,第1题5分,第2题10分)1、#include <iostream>Using namespace std;class Box public:Box(

17、int,int,int);Int volume(); private:int height;int width;int length;Box:Box(int h,int w,int len) height=h; width=w; length=len;int Box:volume()return(height*width*length);int main()Box box1(12,25,30);cout<<”The volume of box1 is”<<box1.volume()<<endl;Box box2(15,30,21);cout<<”

18、The volume of box2 is”<<box2.volume()<<endl;Return0; 2、#include <iostream>using namespace std;class Shapepublic: virtual double area() const =0; ;class Circle:public Shapepublic:Circle(double r):radius(r) virtual double area() const return 3.14159*radius*radius; protected: double r

19、adius; ;class Square:public Shapepublic: Square(double s):side(s) virtual double area() const return side*side; protected: double side;class Rectangle:public Shapepublic: Rectangle(double w,double h):width(w),height(h) virtual double area() const return width*height; protected: double width,height;

20、;class Trapezoid:public Shapepublic: Trapezoid(double t,double b,double h):top(t),bottom(t),height(h) virtual double area() const return 0.5*(top+bottom)*height; protected: double top,bottom,height; ;class Triangle:public Shapepublic: Triangle(double w,double h):width(w),height(h) virtual double are

21、a() const return 0.5*width*height; protected: double width,height; ;int main() Circle circle(12.6); Square square(3.5); Rectangle rectangle(4.5,8.4); Trapezoid trapezoid(2.0,4.5,3.2); Triangle triangle(4.5,8.4); Shape *pt5=&circle,&square,&rectangle,&trapezoid,&triangle; double a

22、reas=0.0; for(int i=0;i<5;i+) areas=areas+pti->area(); cout<<"totol of all areas="<<areas<<endl; return 0;。一、填空题(每空一分,共15分,15%)1、面向对象程序设计的三大特性是:封装性、_、_。用来定义C+类的关键字是_。2、要使用C+中的输入输出流函数,在程序中必须包含的头文件是_;要使用字符串处理函数,需包含的头文件是_。3、任何类中允许有三种类型的数据:_、_、_;在默认情况下,类的成员的操作属性是_。4、一个类

23、有_个构造函数。5、this指针是一个隐含于每一个类的成员函数的特殊指针,该指针所指向的对象是_;6、C+中按照对象生存期的不同,把对象分为三种:_、_、_。7、C+中虚基类的引入,其真正目的是_。得分二、选择题(每小题2分,共40分,40%)1、下列关于构造函数和析构函数的描述中,正确的是_。(A)构造函数和析构函数都不能有参数;(B)构造函数和析构函数都可以重载;(C)构造函数和析构函数都没有类型;(D)构造函数和析构函数都可以继承;2、下列关于C+中常量的描述中,正确的是_。(A)定义常量的关键字是static;(B)常成员函数可以更改常量的值;(C)常量定义时必须进行初始化;(D)定义

24、一般常量时,常量关键字摆放的位置无关;3、下列关于函数重载的描述中,正确的是_。(A)函数名不同,也可进行函数重载;(B)函数名相同,函数类型不同,也是函数重载;(C)函数名相同,函数类型相同,肯定不是函数重载;(D)函数名相同,函数类型相同,函数参数不同,是函数的重载;4、下述静态成员的特性中,_是错误的。(A)说明静态数据成员时前边要加修饰符staic;(B)静态数据成员要在类体外进行初始化;(C)引用静态数据成员时,要在静态数据成员名前加<类名>和域作用运算符;(D)静态数据成员是属于类的,因此它不能被对象所操作;5、char a=”student”; const char

25、*ptr=&a; ptr应该是_。(A)指向字符常量的指针;(B)指向字符的常量指针;(C)指向字符串常量的指针;(D)指向字符串的常量指针;6、已知:print()函数时一个类的常成员函数,并且无返回值,下列表示中,_是正确的。(A)void print() const;(B)const void print();(C)void const print();(D)void print(const);7、运算符>*的功能是_。(A)用来表示指向对象指针对指向类成员指针的操作;(B)用来表示对象对指向类成员指针的操作;(C)用来表示指向对象指针对类成员的操作;(D)用来表示对象对类

26、成员的操作;8、下列对派生类的描述中,_是错误的。(A)一个派生类可以作为另一个派生类的基类;(B)派生类至少有一个基类;(C)派生类的成员除了它自己的成员外,还包含了它的基类的成员;(D)派生类中继承的基类成员的访问权限到派生类保持不变;9、派生类的构造函数的成员初始值表中,不能包含_。(A)基类的构造函数;(B)派生类的子对象的初始化;(C)基类的子对象的初始化;(D)派生类中一般数据成员的初始化;10、下列表达式中,_是非法的。已知:int a=5;float b=5.5;(A)a%3+b;(B)b*b&&+a;(C)(a>b)+(int (b)%2);(D)+a+

27、b;11、在未对基类中的可继承成员重新做属性声明时,派生类的对象对它的基类成员中_是可以访问的。(A)公有继承的公有成员;(B)公有继承的私有成员;(C)公有继承的保护成员;(D)私有继承的公有成员;12、下列存储类标识符中,_的可见性与存在性不一致。(A)外部类 (B)自动类 (C)内部静态类(D)寄存器类13、在C+中,下列关于设置函数参数默认值的描述中,正确的是_。(A)当设置了参数的默认值后,就不能用从主调函数传来的数据;(B)设置参数默认值时,应该是先设置左边的,再设置右边的;(C)设置参数默认值时,应该是先设置右边的,再设置左边的;(D)设置参数默认值时,应该全部参数都设置;14、

28、下列说法中不正确的是_。(E)公有继承时基类中的public成员在派生类中仍是public的;(F)公有继承时基类中的private成员在派生类中仍是private的;(G)私有继承时基类中的public成员在派生类中是private的;(H)保护继承时基类中的public成员在派生类中是protected的;15、以下说法中不正确的是_。(A)构造函数和析构函数不可以被继承;(B)基类的友元关系不可以被继承;(C)派生类中的友元可以访问基类中的private成员;(D)当派生类和基类中出现同名成员函数时,派生类覆盖基类;16、关于多继承二义性的描述中,_是错误的。(A)一个派生类的两个基类中

29、都有某个同名成员,在派生类中对这个成员的访问可能出现二义性;(B)解决二义性的最常用的方法是对成员名的限定法;(C)基类和派生类中同时出现的同名函数,也存在访问上的二义性;(D)一个派生类是从两个基类中派生出来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现二义性;17、带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化_。(A)与虚基类下面的派生类个数有关;(B)多次;(C)二次;(D)一次;18、作用域运算符的功能是_。(A)标识作用域的级别;(B)指出作用域的范围;(C)给定作用域的大小;(D)标识某个成员是属于哪

30、个类的;;19、对于派生类中的构造函数,在定义对象时构造函数的执行顺序为_。(A)基类构造函数>派生类构造函数>成员对象的构造函数;(B)派生类构造函数>基类构造函数>成员对象的构造函数;(C)成员对象的构造函数>派生类构造函数>基类构造函数;(D)基类构造函数>成员对象的构造函数>派生类构造函数;20、已知int a,b;下列增量和减量表达式正确的是_。(A)(a+)+;(B)a+b;(C)+(a+)+(+b);(D)a+b;得分三、程序改错。如果程序有错误(可能有多处),请说明错误的理由,并改正;没有不用改正,只需判断;(每题2分,共10分,

31、10%)1、char *ptr=new char20;delete ptr;2、class A private:int x=2,y=6;3、声明类Tdate的析构函数:void date(int ,int ,int);4、int a=8,b=9;int *const pa=&a;int const *pb=&b;*pa=b;*pb=a;5、class Apublic:A(int x,int y)X=x;Y=y;private:int X,Y;class B:public Apublic:B(int p,int q)P=p;Q=q;privare:int P,Q;得分四、写出程序

32、的运行结果(每题3分,共6分)1、#include <iostream.h>int f(int a);void main()int a=2,i;for(i=0;i<3;i+)cout<<f(a)<<” “;static int c=3; int f(int a)int b=0;b+;c+;return(a+b+c);2、#include <iostream.h>class Apublic:A(int i,int j)a=i;b=j;void Move(int x,int y)a+=x;b+=y;void Show()cout<<

33、"("<<a<<","<<b<<")"<<endl;private:int a,b;class B:public Apublic:B(int i,int j,int k,int l):A(i,j),x(k),y(l)void Show()cout<<x<<","<<y<<endl;void fun()Move(3,5);void f1()A:Show();private:int x,y;void main()

34、A e(1,2);e.Show();B d(3,4,5,6);d.fun();d.A:Show();d.B:Show();d.f1();得分五、问答题(第一题4分,第二题4分,第三题6分,共14分,14%)1、从下面的描述中,体现出面向对象中的什么概念?(1)“小兔儿过桥,蹦蹦跳;小鸭子过桥,摇啊摇;小螃蟹过桥,横着爬;小袋鼠过桥,妈妈抱。”。(2)“在某些情况下,石头可以起到锤子的作用”。2、如果我们要编写一个Tdate的日期类,在类中,我们要完成如下功能:(1)对任意设定的日期,能够进行日期的加减N天的操作;(0<N<31)(2)对任意设定的日期,能够计算它等于星期几;(设定1

35、900/1/1星期一为基准)为了达到以上的程序效果,思考(1)如何处理日期计算中的不同月份天数不同的问题(也就是你采用何种数据结构来存储数据)?(2)对于功能二,要计算等于星期几,你是如何思考的;函数的功能实现中着重要处理什么问题,你如何处理?3、阅读以下程序,回答问题。#include <iostream.h>class Apublic:void f1();A()i1=10,j1=11;protected:int j1;private:int i1;class B:public Apublic:void f2();B()i2=20;j2=21;protected:int j2;p

36、rivate:int i2;class C:private Bpublic:void f3();C()i3=30;j3=31;protected:int j3;private:int i3;回答下列问题:(1)派生类B中的成员函数f2( ),能否访问基类A中成员:f1( ),i1,j1;(2)派生类B的对象b能否发访问基类A中的成员:f1( ),i1,j1;(3)派生类C中的成员函数f3( )能否访问直接基类B中的成员:f2( )和j2;能否访问间接基类A中的成员f1( ),j1,i1;(4)派生类C的对象c能否访问直接基类B中的成员f2( )和j2;能否访问间接基类A中的成员f1( ),j1

37、,i1;得分六、程序设计题(每题15分,共一题,共15分)1 分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师干部)类。要求:(1) 在两个基类中都包含姓名、年龄、性别、地址、电话数据成员;(2) 在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务),在Teacher_Cadre类中还包含数据成员wages(工资)。(3) 对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。(4) 在类中声明成员函数,在类外定义成员函数。(

38、5) 在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、地址、电话,然后用cout语句输出织物与工资。一、填空题:(每空1分,15%) 1、继承、多态、class; 2、iostream.h、string.h; 3、public、private、protected、private; 4、1个或多个 5、正在操作该成员函数的对象; 6、局部对象、静态对象、全局对象 7、消除二义性、二、选择题:(每题2分,40%) 1-5C(C,D) DDC 6-10AADCD 11-15ACCBC 16-20CDDDD三、程序改错。如果程序有

39、错误,请说明错误的理由,并改正;没有不用改正,只需判断;(每题2分,共10分,10%)1、指针ptr指向的是字符型数组,所以使用delete撤销new运算符开辟的空间时,应在delete后使用;delete ptr; 2、在类的定义中,不能对类的数据成员赋予默认值。int x ,y;3、析构函数没有返回值类型,所以不能用void,不能带参数。 date( );4、pb是常指针,不能重新赋值。去除*pb=a;5、派生类的构造函数要完成基类数据成员的初始化B(int x,int y,int p,int q) :X(x),Y(y)P=p;Q=q;四、写出程序输出结果(每题3分,共6分)1.

40、 7 8 92. (1,2)(6,9)5,6(6,9) 1、(1)多态性 (2)继承性2、(1)定义数组来进行每个月份的天数的存储。 int month12=31,28,31,30,31,30,31,31,30,31,30,31; (2)可以设定一个基准计算的日期,如2001年的1月1号为星期一,然后计算当前时间与基准日期之前的天数,然后除以7,得余数,就可以得到当前时间是星期几。需要处理的是,中间的闰年的2月份天数+1的问题。3、(1)派生类B中的成员函数f2,能访问基类A中f1和j1,不能访问i1; (2)派生类B的对象b,能访问基类A中的f1,不能访问 j1和 i1; (3)派生类C中的

41、成员函数f3能访问直接基类B中的f2和j2;能访问间接基类A中的f1和j1,不能访问i1; (4)派生类C的对象c不能访问直接基类B中的成员f2( )和j2;不能访问间接基类A中的成员f1( ),j1,i1;六、程序设计题(第一题5分,第二题10分,共15分)#include <string>#include <iostream>using namespace std;class Teacherpublic:Teacher(string nam,int a,char s,string tit,string ad,string t);void display(); protected:string name;int age;char sex;string title;string addr;string tel;Teacher:Teacher(string nam,int a,char s,string tit,string ad,string t): name(name),age(a),sex(s),title(tit),addr(ad),tel(t)void Teacher:display()cout<<”name:”<

温馨提示

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

评论

0/150

提交评论