C语言考试复习题
- 格式:docx
- 大小:21.03 KB
- 文档页数:9
C语言考试复习题
类与对象
一、选择填空
1.已知一个类A,()是指向A类成员的指针。假设类有3个公
有成员;void f1(int),void f2(int)和int a。
A.A *p;
B.int A::*pc=&A::a;
C.void A::*pa();
D.A*pp;
答案:C。
2.运算符->*的功能是()。
A.用来表示指向对象指针对指向类成员指针的操作。
B.用来表示对象对指向类成员指针的操作。
C 用来表示指向对象指针对类成员的操作。
D 用来表示对象类成员的操作。
答案:A。
3.已知f1(int)是类A的公有成员函数,p是指向成员函数f1()的指针,采用()是正确的。
A.p=f1;
B.p=A::f1;
C.p=A::f1();
D.p=f1();
答案:B。
4.已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为5,()是正确的。
A.A1.p=5;
B.A1->p=5;
C.A1.*p=5;
D.*A1.p=5; 答案:C。
5.已知类A中一个成员函数说明如下所示。
void Set(A&a);
其中,A&a的含意是()。
A.指向类A的指针a。
B.将a的地址值赋给变量Set。
C.a是类A的对象引用,用来作函数Set()的形参。
D.变量A与a按位相与作为函数Set()的参数。
答案:C。
6.下列关于对象数组的描述中,()是错误的。
A.对象数组的下标是从0开始的。
B.对象数组的数组名是一个常量指针。
C.对象数组的每个元素是同一个类的对象。
D.对象数组只能赋初值,而不能被赋值。
答案:D。
7.下列定义中,()是定义指向数组的指针p。
A.int*p[5];
B.int(*p)[5];
C.(int*)p[5];
D.int*p[];
答案:B。
8.下列说明中
const char*ptr
ptr应该是()。
A.指向字符常量的指针。
B.指向字符的常量指针。
C.指向字符串常量的指针。
D.指向字符串的常量指针。
答案:C。
9.已知:print()函数是一个类的常成员函数,它无返回值,下 列表示中,()是正确的。
A.void print()const;
B.const void print();
C.void const print();
D.void print(const)。
答案:A。
10.关于new运算符的下列描述中,()是错的。
A.它可以用来动态创建对象和对象数组。
B.使用它创建的对象或对象数组,可以使用运算符delete 删除。
C.使用它创建对象时要调用构造函数。
D.使用它创建对象数组是必须指定初始化。
答案:D。
11.关于delete运算符的下列描述中,()是错的。
A.它必须用于new返回的指针。
B.它也适用于空指针。
C.对一个指针可以适用多次该运算符。
D.指针名前只用一对方括号符,不管所删除数组的维数。
答案:C。
12.具有转换函数功能的构造函数,应该是()。
A.不带任何参数的构造函数。
B.带有一个参数的构造函数。
C.带有两个以上的参数的构造函数。
D.默认构造函数。
答案:B。
二、判断下列描述是否正确。
1.指向对象的指针和指向类的成员的指针在表达形式上是不相同的。(正确)
2.已知:m是类A的对象,n是类A的公有数据成员,p是指向类A中n成员的指针。下述两种表示是等价的。
m.n和m.*p.(正确) 3.指向对象的指针与独享都可以作为函数参数,但是使用前者比后者好些。(正确)
4,。对象引用作函数参数比用对象指针更方便些。(正确)
5.对象数组的元素可以是不同类的对象。(错误)
6.对象数组既可以赋初值又可以赋值。(正确)
7.指向对象数组的指针不一定必须指向数组的首元素。(正确)
8.一维对象指针数组的每个元素应该是某个类的对象的地址值。(正确)
9.const char *p说明了p是指向字符串常量的指针。(正确)
10.一个能够更新的变量使用在一个不能更新的环境中是不破坏类型保护的,反之亦然。(错误)
11.一个类的构造函数中可以不包含对其子对象的初始化。(错误)
12.转换函数不是成员函数,它是用来进行强制类型转换的。(错误)
继承性和派生类
一、选择填空
1.下列对派生类的描述中,()是错的。
A.一个派生类可以作为另外一个派生类的基类。
B.派生类至少有一个基类。
C.派生类的成员除了它自己的成员外,还包含了它的基类成
员。
D.派生类中继承的基类成员的访问权限到派生类保持不变。答案:D。
2.派生类的对象对它的基类中()是可以访问的。
A.公有继承的公有成员。
B.公有继承的私有成员。
C.公有继承的保护成员。
D.私有继承的公有成员。
答案:A。
3.对基类和派生类的关系描述中,()是错的。 A.派生类是基类的具体化。
B.派生类是基类的子集。
C.派生类是基类定义的延续。
D.派生类是基类的组合。
答案:B
4.派生类的构造函数的成员初始化表中,不能包含()。A.基类的构造函数。
B.派生类中子对象的初始化。
C.基类的子对象初始化。
D.派生类中一般数据成员的初始化。
答案:C。
5.关于子类型的描述中,()是错的。
A.子类型就是指派生类是基类的子类型。
B.一种类型当它至少提供了另一种类型的行为,则这种类型是另一种类型的子类型。
C.在公有继承下,派生类是基类的子类型。
D.子类型关系是不可逆的。
答案:A。
6.关于多继承二义性的描述中,()是错的。
A.一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性。
B.解决二义性的最常用的方法是对成员函数的限定法。C.基类和派生类中同时出现的同名函数,也存在二义性问题。D.一个派生类是从两个基类派生来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现二
义性。
答案:C。
7.设置虚基类的目的是()。
A.简化程序。
B.消除二义性。 C.提高运行效率。
D.减少目标代码。
答案:B。
8.带有虚基类的多层派生类构造函数的成员初始化列表中都要
列出虚基类的构造函数,这样将对虚基类的子对象初始化()。A.与虚基类下面的派生类个数有关。
B.多次。
C.二次。
D.一次。
答案:D。
二、判断下列描述的正确性。
1.C++语言中,既允许单继承,有允许多继承。(正确)
2.派生类是从基类派生出来,它不能再生成新的派生类。(错误)
3.派生类的继承方式有两种:公有继承和私有继承。(错误)
4.在公有继承中,基类中的公有成员和私有成员在派生类中都
是可见的。(错误)
5.在公有继承中,基类中只有公有成员对派生类对象时可见的。
(正确)
6.在私有继承中,基类中只有公有成员对派生类是可见的。(错
误)
7.在私有继承中,基类中所有成员对派生类的对象都是不可见
的。(正确)
8.在保护继承中,对于垂直访问同于公有继承,而对于水平访
问同于私有继承。(正确)
9.派生类是它的基类的组合。
10.构造函数可以被继承。(错误)
11.析构函数不能被继承(正确)
12.子类型是不可逆的。(正确)
13.只要是类M继承了类N,就可以说类M是类N的子类型。(错 误)
14.如果A类型是B类型的子类型,则A类型必然适应于B类型。
(正确)
15.多继承情况下,派生类的构造函数的执行顺序取决于定义派
生类时所指定的各基类的顺序。(正确)
16.单继承情况下,派生类中对基类成员的访问会出现二义性。
(错误)
17.解决多继承情况下出现的二义性的方法之一是使用成员名限
定法。(正确)
18.虚基类是用来解决多继承中公共基类在派生类中只产生一个
基类子对象的问题。(正确)
多态性与虚函数
一、选择填空
1.对定义重载函数的下列要求中,()是错误的。
A.要求参数的个数不同。
B.要求参数中至少有一个类型不同。
C.要求参数个数相同时,参数类型不同。
D.要求函数的返回值不同。
答案:D
2.下列函数中,()不能重载。
A.成员函数。
B.非成员函数。
C.析构函数。
D.构造函数。
答案:C。
3.下列对重载函数的描述中,()是错误的。A.重载函数中不允许使用默认参数。
B.重载函数中编译系根据参数表进行选择。C.不要使用重载函数来描述毫无相干的函数。D.构造函数重载将会给初始化带来多种方式。答案:A。 4.下列运算符中()运算符不能重载。
A.&&。
B.[]。
C.::。
D.new。
答案:C。
5.下列关于运算符重载的描述中,()是正确的。A.运算符重载可以改变操作数的个数。
B.运算符重载可以改变优先级。
C.运算符重载可以改变结合性。
D.运算符重载不可以改变语法结构。
答案:D。
6.运算符重载函数是()。
A.成员函数。
B.友元函数。
C.内联函数。
D.带默认参数的函数。
答案:A、B。
7.关于动态联编的下列描述中,()是错误的。
A.动态联编是以虚函数为基础的。
B.动态联编是在运行时确定所调用的函数代码的。
C.动态联编调用函数操作是用指向对象的指针或对象引用。D.动态联编是在编译时确定操作函数的。
答案:D。
8.关于虚函数的描述中,()是正确的。
A.虚函数是一个static类型的成员函数。
B.虚函数是一个非成员函数。
C.基类中说明了虚函数后,派生类中将其对应的函数可不必说明虚函数。
D.派生类的虚函数与基类的虚函数具有不同的参数个数和类型。