C/C++面试题
一、单选题
1.以下叙述正确的是(C)
A.在C++程序中,main函数必须位于程序的最前面
B.C++程序的每行中只能写一条语句
C.C++语言本身没有输入输出语句
D.在对一个C++程序进行编译的过程中,可发现注释中的拼写错误
2.有关函数重载的正确说法是(B)
A.函数名不同,但参数的个数和类型相同
B.函数名相同,但参数的个数不同或参数的类型不同
C.函数名相同,参数的个数和类型相同
D.函数名相同,函数的返回值不同,而与函数的参数和类型无关
3.已知int a[3][2]={3,2,1};则表达式“a[0][0]/a[0][1]/a[0][2]”的值是(B)
A.0.166667
B.1
C.0
D.错误的表达式。
4.若用数组名作为函数调用时的实参,则实际上传递给形参的是(A)
A.数组首地址
B.数组的第一个元素值
C.数组中全部元素的值
D.数组元素的个数
5.下面函数的功能是(B)
void fun(char*s1,char*s2){while(*s2++=*s1++);}
A.字符串比较
B.字符串复制
C.字符串连接
D.字符串反向
6.下面关于虚函数和函数重载的叙述中,不正确的是(A)
A.虚函数不是类的成员函数
B.虚函数实现了C++的多态性
C.函数重载允许非成员函数,而虚函数则不行
D.函数重载的调用根据参数的个数、序列来确定,而虚函数依据对象确定
7.要禁止修改指针p本身,又要禁止修改p所指向的数据,这样的指针应定义为(D)
B.char const*p="ABCD";
C.char*const p="ABCD";
8.以下不合法的用户标识符是(C)
A.f2_G3
B.IF
C.4d
D._8
9.C语言中,double型数据所占字节数是(D)
A.2
B.4
C.6
D.8
10.关于类和对象不正确的说法是(C)
A.类是一种类型,它封装了数据和操作
B.对象是类的实例
C.一个类的对象只有一个
D.一个对象必属于某个类
11.在类定义的外部,可以被访问的成员有(C)
A.所有类成员
B.private或protected的类成员
C.public的类成员
D.public或private的类成员
12.关于this指针的说法错误的是(A)
A.this指针必须显示说明
B.当创建一个对象后,this指针就指向该对象
C.成员函数拥有this指针
D.静态成员函数不拥有this指针
13.对静态成员的不正确描述是(C)
A.静态成员不属于对象,是类的共享成员
B.静态数据成员要在类外定义和初始化
C.调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针
D.非静态成员函数也可以操作静态数据成员
14.在创建派生类对象时,构造函数的执行顺序是(D)
A.对象成员构造函数、基类构造函数、派生类本身的构造函数
B.派生类本身的构造函数、基类构造函数、对象成员构造函数
C.基类构造函数、派生类本身的构造函数、对象成员构造函数
D.基类构造函数、对象成员构造函数、派生类本身的构造函数
15.字符串:”\\0211\”xab”的长度为(B)
A.1
B.9
C.0
D.11
16.以下叙述中错误的是(C)
A.局部变量的定义可以在函数体内部
B.全局变量的定义可以在函数以外的任何位置
C.同一程序中,全局变量和局部变量不能同名
D.函数的形参属于局部变量
17.下面对构造函数的不正确描述是(B)
A.系统可以提供默认的构造函数
B.构造函数可以有参数,所以可以有返回值
C.构造函数可以重载
D.构造函数可以设置默认参数
18.下面对析构函数的正确描述是(C)
A.系统不能提供默认的析构函数
B.析构函数必须由用户定义
C.析构函数没有参数
D.析构函数可以设置默认参数
19.对静态成员的不正确描述是(C)
A.静态成员不属于对象,是类的共享成员
B.静态数据成员要在类外定义和初始化
C.调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针
D.非静态成员函数也可以操作静态数据成员
20.下面对友元的错误描述是(D)
A.关键字friend用于声明友元
B.一个类的成员函数可以是另一个类的友元
C.友元函数访问对象的成员不受访问特性影响
D.友元函数通过this指针访问对象成员
21.下列关于类的继承描述中,错误的是(A)
A.派生类可以访问基类的所有数据成员,也能调用基类的所有成员函数
B.派生类也是基类,但基类不一定具有派生类的全部属性和方法
C.继承描述类的层次关系,派生类可以具有与基类相同的属性和方法
D.一个基类可以有多个派生类,一个派生类可以有多个基类
22.当一个派生类私有继承一个基类时,基类中的所有仅有成员和保护成员成为派生类的
(B)
A.public成员
B.private成员
C.protected成员
D.友元
23.不论派生类以何种方法继承基类,都不能使用基类的(B)
A.public成员
B.private成员
C.protected成员
D.public成员和protected成员
24.在C++中,要实现动态联编,必须使用(D)调用虚函数
A.类名
B.派生类指针
C.对象名
D.基类指针
25.下列运算符中(A)运算符在C++中不能重载。
A.?:
B.[]
D.&&
26.在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺
序和函数的返回值(B)
A.不同
B.相同
C.相容
D.部分相同
27.下面函数原型声明中,(B)声明了fun为纯虚函数
A.void fun()=0;
B.virtual void fun()=0;
C.virtual void fun();
D.virtual void fun(){};
28.在排序方法中,关键码比较次数与记录地初始排列无关的是(D)
A.Shell排序
B.归并排序
C.直接插入排序
D.选择排序
29.代码如下中,变量val的内存地址位于(B)
void func(){
static int val;
}
A.已初始化数据段
B.未初始化数据段
C.堆
D.栈
30.同一进程下的线程可以共享以下(B)
A.stack
B.data section
D.thread ID
31.short a[100],sizeof(a)返回值是(D)
A.2
B.4
C.100
D.200
E.400
32.一个栈的入栈序列是A,B,C,D,E,则栈的不可能的输出序列是(C)
A.EDCBA;
B.DECBA;
C.DCEAB;
D.ABCDE
33.友元运算符obj>obj2被C++编译器解释为(A)。
A.operator>(obj1,obj2)
B.>(obj1,obj2)
C.obj2.operator>(obj1)
D.obj1.oprator>(obj2)
34.在一个类中可以对一个操作符进行(D)重载。
指针调用成员函数
A.1种
B.2种以下
C.3种以下
D.多种
35.下列关于C++运算符函数的返回类型的描述中,错误的是(C)。
A.可以是类类型
B.可以是int类型
C.可以是void类型
D.可以是float类型
二、多选题
36.下面描述中,错误的是(BC)
A.在基类定义的public成员在公有继承的派生类中可见,也能在类外被访问
B.在基类定义的public和protected成员在私有继承的派生类中可见,在类外可以被
访问
C.在基类定义的public和protected成员在保护继承的派生类中不可见
D.在派生类中不可见的成员要变成可访问的,需要进行访问声明
37.在C++中,不能被派生类继承的函数是(BC)
A.成员函数
B.构造函数
C.析构函数
D.静态成员函数
38.当不同的类具有相同的间接基类时,有特点(AD)
A.各派生类对象将按继承路线产生自己的基类版本
B.派生类对象无法产生自己的基类版本
C.为了建立惟一的间接基类版本,在基类定义前加virtual即可
D.为了建立惟一的间接基类版本,应该声明虚继承
39.下列函数中,可以作为虚函数的是(CD)
A.普通函数
B.构造函数
C.成员函数
D.析构函数
40.下面描述中,正确的是(BD)
A.虚函数是没有实现的函数
B.纯虚函数的实现在派生类中
C.抽象类是没有纯虚函数的类
D.抽象类指针可以指向不同的派生类
41.下列的模板说明中,正确提(AD)
42.假设有函数模板定义如下:
Template<typename T>
Max(T a,T b,T&c)
{
c=a+b;
}
下列选项正确的是(AD)
A.float x,y;float z;Max(x,y,z);
B.int x,y,z;Max(x,y,z);
C.int x,y;float z;Max(x,y,z);
D.float x;int y,z;Max(x,y,z);
43.以下多线程对int型变量x的操作,哪几个需要进行同步(ABC)
A.x=y;
B.x++;
C.++x;
D.x=1;
44.TCP和IP分别对应了OSI中的哪几层(EG)
A.Application layer
B.Data link layer
C.Presentation layer
D.Physical layer
E.Transport layer
F.Session layer
G.Network layer