一、单项选择题
1. 函数重载是指(  A  )。
A. 两个或两个以上的函数取相同的函数名,但形参的个数或类型不同
B. 两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同
C. 两个以上的函数名字不同,但形参的个数或类型相同
D. 两个以上的函数取相同的函数名,并且函数的返回类型相同
2. 下列对引用的陈述中不正确的是(  C )。
A. 每一个引用都是其所引用对象的别名,因此必须初始化
B. 形式上针对引用的操作实际上作用于它所引用的对象
C. 一旦定义了引用,一切针对其所引用对象的操作只能通过该引用间接进行
D. 不需要单独为引用分配存储空间
3. 关于封装,下列说法中不正确的是(  A )。
A. 通过封装,对象的全部属性和操作结合在一起,形成一个整体
B. 通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见)
C. 通过封装,每个对象都成为相对独立的实体
D. 通过封装,对象的属性都是不可见的
4. 假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为(  C )。
A. px(a)
B. px[a]
C. px->a
D. px.a
5. 假定AA为一个类,int a()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为(  A )。
A. int AA::a()
B. int AA:a()
C. AA::a()
D. AA::int a()
6. 类的构造函数是在定义该类的一个(  C  )时被自动调用执行的。
A. 成员函数
B. 数据成员
C. 对象
D. 友元函数
7.在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是( C )
A.派生类的对象可以赋给基类的对象
B.派生类的对象可以初始化基类的引用
C.派生类的对象可以直接访问基类中的成员
D.派生类的对象的地址可以赋给指向基类的指针
8.对于类定义
class A{
public:
virtual void func1( ){ }
void func2( ){ }
};
class B:public A{
public:
void func1( ){cout<<〃class B func 1〃<<end1;}
virtual void func2( ){cout<<〃class B func 2〃<<end1;}
};
下面正确的叙述是( C ) A、 A::func2( )和B::func1( )都是虚函数
B、A::func2( )和B::func1( )都不是虚函数
C、 B::func1( )是虚函数,而A::func2( )不是虚函数
D、B::func1( )不是虚函数,而A::func2( )是虚函数
9. 对于int *pa[5];的描述,(D )是正确的。
A、pa是一个指向数组的指针,所指向的数组是5个int型元素;
指向类成员函数的指针
B、pa是一个指向某个数组中第5个元素的指针,该元素是int型变量;
C、pa[5]表示某个数组的第5个元素的值;
D、pa是一个具有5个元素的指针数组,每个元素是一个int型指针;
10. 下述静态数据成员的特征中,( D )是错误的。
A、说明静态数据成员时前边要加修饰符static;
B、静态数据成员要在类体外进行初始化;
C、引用静态数据成员时,要在静态数据成员名前加<;类名>和作用域运算符;
D、静态数据成员不是所有对象所共用的。
11. 以下关于函数模板叙述正确的是(  C  )。
A. 函数模板也是一个具体类型的函数
B. 函数模板的类型参数与函数的参数是同一个概念
C. 通过使用不同的类型参数,函数模板可以生成不同类型的函数
D. 用函数模板定义的函数没有类型
12. 下列(  B  )的调用方式是引用调用。
A. 形参和实参都是变量
B.形参是指针,实参是地址值
C. 形参是引用,实参是变量
D.形参是变量,实参是地址值
13. 为了提高程序的运行速度,可将不太复杂的功能用函数实现,此函数应选择(  A  )。
A. 内联函数
B.重载函数
C.递归函数
D.函数模板
14. 面向对象方法的多态性是指(  C )。
A. 一个类可以派生出多个特殊类
B. 一个对象在不同的运行环境中可以有不同的变体
C. 针对一消息,不同的对象可以以适合自身的方式加以响应
D. 一个对象可以是由多个其他对象组合而成的
15. 在类作用域中能够直接使用该类的(  D )成员名进行访问。
A. 私有
B. 公用
C. 保护
D. 任何
16. 假定一个类AB只含有一个整型数据成员a,用户为该类定义的带参构造函数可以为(  D  )。
A. AB() {}
B. AB(): a(0){}
C. AB(int aa=0) {a=aa;}
D. AB(int aa) {}
17. 对于任一个类,用户所能定义的构造函数的个数至多为(  D  )。
A. 0
B. 1
C. 2
D. 任意个
18. 对类对象成员的初始化是通过构造函数中给出的(  D  )实现的。
A. 函数体
B. 初始化表
C. 参数表
D. 初始化表或函数体
19. 被非静态成员函数访问的类的数据成员( A )。
A. 可以是非静态数据成员或静态数据成员
B. 不可能是类的静态数据成员
C. 只能是类的非静态数据成员
D. 只能是类的静态数据成员
20. 引入友元的主要目的是为了(  C  )。
A. 增强数据安全性
B. 提高程序的可靠性
C. 提高程序的效率和灵活性
D. 保证类的封装性
21.下面有关重载函数的描述中,正确的是(  C )。
A)重载函数必须具有不同的返回值类型B)重载函数形参个数必须不同
C)重载函数必须具有不同的形参表D)重载函数名可以不同22.假定MyCIass为一个类,那么下列的函数说明中,(  D )为该类的析构函数。
A)void~MyClass(); B)~MyClass(int n);C)MyClass( ); D)~MyClass( );
23.(  A )是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。
A)模板B)类C)对象D)函数
24.下面关于静态成员函数的途术中错语的是(  B )。
A) 静态成员函数可以有返回值 B) this指针可以指向静态成员函数
C) 静态成员函数可以具有指针参数D) 静态成员函数可有具有返回值类型
25.定义类模板时要使用关键字(  D )。
A)private B) public C)delete D)template
26.下列是重载乘法运算符的函数原型声明,其中错误的是(  A )。
A)MyClass operator*(double,double);
B)MyClass operator*(double,MyClass);
C)MyClass operator*(MyClass,double);
D)MyClass operator*(MyClass,MyClass);
27.以下(  C )成员函数表示纯虚函数。
A)virtual int fun(int) B)void fun(int)=0
C)virtual void fun()=0  D)virtual void fun(int){ } 28.关于纯虚函数,下列表述中正确的是(  A )。
A)纯虚函数的声明总是以"=0"结束B)含有纯虚函数的类可以定义对象
C)含有纯虚函数的类是抽象类D)上面都是错误的
29.(  C )解决二义性问题。
A)能使用作用域分辨操作符B) 只能使用虚基类
C) 使用作用域分辨操作符或虚基类D) 上面都不能
30.实现编译时的多态性要使用(  A )。
A)重载函数B)析构函数C)构造函数D)虚函数
31、C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法
上进行的最大改进是(B)
、面向过程B、面向对象C、安全性D、复用性
32、考虑函数原型void test(int a,int  b=7,char="*"),下面的函数调用中,属于不合法调用的是(C)
、test(5); B、test(5,8); C、test(6,"#") D、test(0,0."*");;
33、下面有关重载函数的说法中正确的是(C)
、重载函数必须具有不同的返回值类型;B、重载函数形参个数必须不同;
C、重载函数必须有不同的形参列表
D、重载函数名可以不同;
34、下列关于构造函数的描述中,错误的是(D)
、构造函数可以设置默认参数;B、构造函数在定义类对象时自动执行
C、构造函数可以是内联函数;
D、构造函数不可以重载
35. 关于对象概念的描述中,(A )是错误的。
A、对象就是C语言中的结构变量;
B、对象代表着正在创建的系统中的一个实体;
C、对象是一个状态和操作(或方法)的封装体;
D、对象之间的信息传递是通过消息进行的;
36. 对于int *pa[5];的描述,(D)是正确的。
A、pa是一个指向数组的指针,所指向的数组是5个int型元素;
B、pa是一个指向某个数组中第5个元素的指针,该元素是int型变量;
C、pa[5]表示某个数组的第5个元素的值;
D、pa是一个具有5个元素的指针数组,每个元素是一个int型指针;
37. 下述静态数据成员的特征中,( D )是错误的。
A、说明静态数据成员时前边要加修饰符static;
B、静态数据成员要在类体外进行初始化;
C、引用静态数据成员时,要在静态数据成员名前加<;类名>和作用域运算符;
D、静态数据成员不是所有对象所共用的。
38. ( A )是析构函数的特征。
A、一个类中只能定义一个析构函数;
B、析构函数与类名不同;
C、析构函数的定义只能在类体内;
D、析构函数可以有一个或多个参数。
39.    已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋
值为5,( C )是正确的。
A、A1.p=5;
B、A1->p=5;
C、A1.*p=5;
D、*A1.p=5;
40.  派生类的对象对它的基类成员中( C )是可以访问的。
A、公有继承的公有成员;
B、公有继承的私有成员;
C、公有继承的保护成员;
D、私有继承的公有成员。
41.下列表示引用的方法中,正确的是(A)。
(A)int m=10; int &x=m; (B) int m=10; int &y=10;
(C) int m=10; int &z; (D)int m=10; ifloat &t=&m;
42.下列标识符中,(  C )是文件作用域。
(A)函数形参(B)语句标号
(C)外部静态标识符(D)自动类标识符
43.在程序中,函数声明语句正确位置是(D)
(A)随便任何位置
(B)不包含在另一函数中的任何位置。
(C)该函数使用前的任何位置
(D)该函数使用前的任何位置,但不包含在另一函数中
44.下面有关函数重载的程序段正确的是(A) 。
(A)int fun(int x, int y); int fun(float x, float y);
(B) int fun(int x, int y); int fun(int a, int b);
(C) float fun(int x, int y); int fun(int x, int y);
( D) int main(); void main();
45.返回类型就是函数返回结果值的数据类型。返回类型可以是(C)
(A) 除数组和类以外的任意数据类型
(B)除数组和结构类型以外的任意数据类型