《c面向对象程序设计语言重点难点复习题模拟自测题及答案》由会员分享,可在线阅读,更多相关《c面向对象程序设计语言重点难点复习题模拟自测题及答案(50页珍藏版)》请在金锄头文库上搜索。
1、学习必备欢迎下载提示:1、本练习题、试题集全部来自网上共享资源,包括C+面向过程和面向对象的相关内容,今下载整理仅为便于复习、练习,请有选择地阅读;2、请同学们做练习题时先独立思考,再参考答案;附后有几套模拟试题,全部来自网上其他院校的期末试卷,供同学们模拟自测。3、试题量大,难免会有错误,请慎重选用、思考。1、数据共享与保护一、选择题:1、在下面存储类中, ( C ) 对象的可见性与生存期不一致。 A. 外部类 B. 自动类 C. 内部静态类 D. 寄存器类2、在下面存储类中,(A)的对象不是局部变量。 A. 外部静态类 B. 自动类 C. 函数形参 D. 寄存器类3、关于局部变量,下面说法
2、正确的是( C )。A. 定义该变量的程序文件中的函数都可以访问B. 定义该变量的函数中的定义处以下的任何语句都可以访问C. 定义该变量的复合语句中的定义处以下的任何语句都可以访问D. 定义该变量的函数中的定义处以上的任何语句都可以访问4、一个类的静态数据成员所表示属性 ( C )。 A. 是类的或对象的属性 B. 只是对象的属性 C. 只是类的属性 D. 类和友元的属性5、类的静态成员的访问控制( D )。A. 只允许被定义为private B. 只允许被定义为private 或 protected C. 只允许被定义为public D. 可允许被定义为private、protected 或
3、 public 6、静态成员函数对类的数据成员访问(B)。 A. 是不允许的 B. 只允许是静态数据成员 C. 只允许是非静态数据成员 D. 可允许是静态数据成员或非静态数据成员7、被非静态成员函数访问的类的数据成员( A ) 。 A. 可以是非静态数据成员或静态数据成员 B. 不可能是类的静态数据成员 C. 只能是类的非静态数据成员 D. 只能是类的静态数据成员8、静态数据成员的初始化是在(D )中进行的。学习必备欢迎下载 A. 构造函数 B. 任何成员函数 C. 所属类 D. 全局区9、当将一个类 A或函数 f() 说明为另一个类B的友元后,类 A或函数 f() 能够直接访问类 B的( D
4、 )。 A. 只能是公有成员 B. 只能是保护成员 C. 只能是除私有成员之外的任何成员 D. 具有任何权限的成员10、引入友元的主要目的是为了( C )。 A. 增强数据安全性 B. 提高程序的可靠性 C. 提高程序的效率和灵活性 D. 保证类的封装性11、 一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明( A )。 A. 需加上类域的限定 B. 不需加上类域的限定 C. 类域的限定可加可不加 D. 不需要任何限定二、判断题1、类的静态数据成员需要在定义每个类的对象时进行初始化。F2、当将一个类 S定义为另一个类A的友元类时,类 S的所有成员函数都可以直接访问类 A的所有成员。
5、 T3、静态数据成员必须在类外定义和初始化。T 4、静态成员函数可以引用属于该类的任何函数成员F。5、友元函数是在类声明中由关键字friend 修饰说明的类的成员函数。F 6、友元函数访问对象中的成员可以不通过对象名F 三、填空题:1、若“double x=100;”是文件 F1.CPP中的一个全局变量定义语句,若文件 F2.CPP中的某个函数需要访问此x , 则应在文件 F2.CPP中添加对 x 的声明语句为 Extern double x;2、如果一个函数定义中使用了static修饰,则该函数不允许被其它文件中的函数调用。3、定义外部变量时,不用存储类说明符Extern ,而声明外部变量时
6、用它。4、调用系统函数时,要先使用#include命令包含该系统函数的原型语句所在的头文件 。5、C+ 程序运行时的内存空间可以分成全局数据区,堆区,栈区和代码区。6、局部变量具有局部生存期,存放在内存的栈区中。7、对类中对象成员的初始化是通过在构造函数中给出的初始化表 来实现的。8、对类中常量成员的初始化是通过在构造函数中给出的初始化表 来实现的。9、对类中引用成员的初始化只能通过在构造函数中给出的初始化表 来实现。10、对类中一般数据成员的初始化既可以通过在构造函数中给出的初始化表来实现,也可以通过构造函数中的函数体 来实现。11、假定要把aa 定义为 AB类中的一个常量整数型数据成员,则
7、定义语句const int aa。学习必备欢迎下载12、假定要把 aa 定义为 AB类中的一个引用整数型数据成员,则定义语句为int &aa 。13、假定 AB类中只包含一个整型数据成员a,并且它是一个常量成员, 若利用参数 aa 对其进行初始化,则该类的构造函数的定义为AB (int aa)a=aa; 。14、假定 AB类中只包含一个整型数据成员a,并且它是一个引用成员, 若利用 引 用 参 数aa 对其 进 行 初 始 化 , 则 该 类 的 构造 函 数 的 定义 为AB(int &aa)a=aa;。15、静态成员函数 能够直接访问类的静态数据成员,只能通过对象名访问类的非静态数据成员。
8、16、静态数据成员必须在所有函数的定义体外进行初始化 。17、一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明必须在函数名前加上 类域的限定。四、修改程序题:下列程序段中, A_class 的成员函数 Variance() 可求出两数的平方差, 请改写该程序段,把Variance() 函数从 A_class 类中分离出来,用友元函数来实现该函数的功能。class A_class private: int x,y,t; public: A_class(int i,int j):x(i),y(j) if(yx)t=x;x=y;y=t; int Variance()return x*x-
9、y*y; /其它函数从略; void main() A_class A_obj(3,5); coutResult:A_obj.Variance()x)t=x;x=y;y=t; friend int Variance(); /其它函数从略; int variance () return x*x-y*y; 学习必备欢迎下载 void main() A_class A_obj(3,5); coutResult:A_obj.Variance()endl; 2、数组、指针与字符串一、选择题: 1 、在下面的一维数组定义中,哪一个有语法错误。(C ) A. int a=1,2,3; B. int a10=
10、0; C. int a; D. int a5; 2、在下面的字符数组定义中,哪一个有语法错误。(D)。 A. char a20=”abcdefg ”; B. char a=”x+y=55. ”; C. char a15; D. char a10=5; 3、在下面的二维数组定义中,正确的是( C ) 。 A. int a5; B. int a5; C. int a3=1,3,5,2; D. int a(10); 4、假定一个二维数组的定义语句为“int a34=3,4,2,8,6;”,则元素 a12的值为(C )。 A. 2 B. 4 C. 6 D. 8 5、假定一个二维数组的定义语句为“int
11、 a34=3,4,2,8,6;”,则元素 a21的值为( A)。 A. 0 B. 4 C. 8 D. 6 6、若定义了函数 double *function(), 则函数 function的返回值为(B)。 A. 实数型 B.实数的地址 C.指向函数的指针 D.函数的地址7、以下函数的返回结果是( A )。 int function(char *x) char *p=x; while(*p+); return(p-x-1); A. 求字符串的长度 B.将字符串 x 连接到字符串 p后面 C. 将字符串 x 复制到字符串 p 中 D.将字符串 x 反向存放8、设有如下函数定义 int f(cha
12、r *s) char *p=s; while(*p!=0) p+; return(p-s); 在主函数中用 coutf( “good”)调用上述函数 , 则输出结果为( B )。学习必备欢迎下载 A. 3 B. 4 C. 5 D. 69、假定变量 m定义为“ int m=7; ”,则定义变量 p 的正确语句为(B )。 A. int p=&m; B. int *p=&m; C. int &p=*m; D. int *p=m;10、变量 s 的定义为“ char *s= ”Hello world!”; ”,要使变量 p 指向 s 所指向的同一个字符串,则应选取( A)。 A. char *p=s
13、; B. char *p=&s; C. char *p;p=*s; D. char *p; p=&s11、关于 void 指针,下列说法正确的是(C )。 A. void 指针就是未指向任何数据的指针 B. void 指针就是已定义而未初始化的指针 C. 指向任何类型数据的指针可直接赋值给一个void 指针 D. void 指针值可直接赋给一个非void 指针12、假定一条定义语句为“ int a10, x, *pa=a;”,若要把数组 a 中下标为 3的元素值赋给 x,则不正确的语句为( D)。 A. x=pa3; B. x=*(a+3); C. x=a3; D. x=*pa+3; 13、假
14、定有定义“ int b10; int *pb;”,则不正确的赋值语句为(D )。 A. pb=b; B. pb=&b0; C. *pb=new int; D. pb=b5; 14、假定 p 是具有 double 类型的指针变量,则表达式+p使 p 的值(以字节为单位)增加(C )。 A. 1 B. 4 C. sizeof(double) D. sizeof(p) 15、假定 p 指向的字符串为” string ”,则 coutp+3 的输出结果为(C)。 A. string B. ring C. ing D. i 16、假定 p 指向的字符串为” string ”,若要输出这个字符串的地址值,
15、则使用( D )。 A. cout*s; B. couts; C. cout&s; D. coutnext和 elemHead D. elemTail-next和 elemTail 26、在一个用链表实现的队列类中,假定每个结点包含的值域用elem 表示,包含的指针域用 next 表示,链队的队首指针用elemHead表示,队尾指针用elemTail 表示,若链队为空,则进行插入时必须把新结点的地址赋给( C ) 。 A. elemHead B. elemTail C. elemHead和 elemTail D. elemHead或 elemTail 27、当类中的一个整型指针成员指向一块具有
16、n*sizeof(int)大小的存储空间时,它最多能够存储 ( A ) 个整数。 A. n B. n+1 C. n-1 D. 128、假定 AB为一个类,则执行“AB *px=new ABn; ”语句时将 ( A ) 。 A. 动态分配一个数组 B. 动态分配一个对象 C. 静态分配一个数组 D. 静态分配一个对象29、设 px 是指向一个类对象的指针变量,则执行“delete px; ”语句时,将自动调用该类的 ( C ) 。 A. 无参构造函数 B. 带参构造函数 C. 析构函数 D. 拷贝构造函数30、当一个类对象离开它的作用域时,系统自动调用该类的( D ) 。 A. 无参构造函数 B. 带参构造函数 C. 拷贝构造函数 D. 析构函数31、假定一个类对象数组为An ,当离开它定义的作用域时,系统自动调用该类析构函数的次数为 ( C ) 。 A. 0 B. 1 C. n D. n-132、假定 AB为一个类,则执行“AB a10; ”语句时调用该类无参构造函数的次数为 ( D ) 。 A. 0 B. 1 C. 9 D. 10 33、假定 AB为一个类,则执行“AB *px=ne