100条经典C++语言笔试题目
题目来源:
1、中兴、华为、慧通、英华达、微软亚洲技术中心等中
外企业面试题目;
2、C++面试宝典(林锐《高质量编程第三版》)、C++
primer、Thinking in C++。
说明:
1、部分C++语言面试题中可能会参杂部分和C相关的知
识,为了保持题目的灵活性故保留,但选题最终还是
会以C++语言题目为主体;
2、以上公司的面试题目已成为国内中小型企业公司出题
模板;
3、由于本人的能力有限加上时间仓促,本课件肯定存在
不足之处,恳请各位同学批评指正。
100条经典C++语言笔试题目
题目类型
C++与C差异(1-18)
数据类型、关键字(19-37)
C++面向对象的特性(38-61)
程序阅读题(62-90)
编程练习(比C要难)(91-100)
100条经典C++语言笔试题目
1、C和C++中struct有什么区别?
【参考答案】
Protection行为 能否定义函数
C 无 否,但可以有函数指针
C++ 有,默认是private 可以
100条经典C++语言笔试题目
2、C++中的struct和class有什么区别?
【参考答案】从语法上讲,class和struct做类型定义时
只有两点区别:
(一)默认继承权限。如果不明确指定,来自class的
继承按照private继承处理,来自struct的继承按照
public继承处理;
(二)成员的默认访问权限。class的成员默认是
private权限,struct默认是public权限。
除了这两点,class和struct基本就是一个东西。语法上
没有任何其它区别。
100条经典C++语言笔试题目
3、如何判断一段程序是由C 编译程序还是由C++编译
程序编译的?
【标准答案】
#ifdef __cplusplus
cout<<“c++";
#else
cout<<"c";
#endif
100条经典C++语言笔试题目
4、 C和C++有什么不同?
【参考答案】从机制上:c是面向过程的(但c也可以编
写面向对象的程序);c++是面向对象的,提供了类。
但是,c++编写面向对象的程序比c容易。
从适用的方向:c适合要求代码体积小的,效率高的场
合,如嵌入式;c++适合更上层的,复杂的; llinux核心
大部分是c写的,因为它是系统软件,效率要求极高。
从名称上也可以看出,c++比c多了+,说明c++是c的超
集;那为什么不叫c+而叫c++呢,是因为c++比
c来说扩充的东西太多了,所以就在c后面放上两个+;
于是就成了c++。
C语言是结构化编程语言,C++是面向对象编程语言。
C++侧重于对象而不是过程,侧重于类的设计而不是逻
辑的设计。
5、“引用”与指针的区别是什么?
【参考答案】指针通过某个指针变量指向一个对象后,
对它所指向的变量间接操作。程序中使用指针,程序
的可读性差;而引用本身就是目标变量的别名,对引
用的操作就是对目标变量的操作。
6、class A
{
virtual void func1();
void func2();
} ;
class B: class A
{
void func1(){cout < < "fun1 in class B" < < endl;}
virtual void func2(){cout < < "fun2 in class B" < < endl;}
}
A, A中的func1和B中的func2都是虚函数
B, A中的func1和B中的func2都不是虚函数.
C, A中的func2是虚函数.,B中的func1不是虚函数.
D, A中的func2不是虚函数,B中的func1是虚函数.
【标准答案】A
100条经典C++语言笔试题目
7、int id[sizeof(unsigned long)];这个对吗?为什么?
【标准答案】正确
这个 sizeof是编译时运算符,编译时就确定了
可以看成和机器有关的常量。
100条经典C++语言笔试题目
8、某文件中定义的静态全局变量(或称静态外部变量)其
作用域是 ()?
A.只限某个函数 B.本文件
C.跨文件 D.不限制作用域
【参考答案】B。静态全局变量则限制了其作用域, 即只
在定义该变量的源文件内有效, 在同一源程序的其它源
文件中不能使用它。由于静态全局变量的作用域局限于
一个源文件内,只能为该源文件内的函数公用, 因此可
以避免在其它源文件中引起错误。
100条经典C++语言笔试题目
9、C++函数中值的传递方式有哪几种?
【标准答案】C++函数的三种传递方式为:值传递、指
针传递和引用传递。
100条经典C++语言笔试题目
10、对于一个频繁使用的短小函数,在C语言中应用什
么实现,在C++中应用什么实现?
【标准答案】c用宏定义,c++用inline
100条经典C++语言笔试题目
11、引用与指针有什么区别?
【参考答案】
1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的
对象。
3) 不存在指向空值的引用,但是存在指向空值的指针
。
100条经典C++语言笔试题目
12、C++中virtual与inline的含义分别是什么?
【参考答案】在基类成员函数的声明前加上virtual关键
字,意味着将该成员函数声明为虚函数。inline与函数
的定义体放在一起,使该函数称为内联。inline是一种
用于实现的关键字,而不是用于声明的关键字。
虚函数的特点;如果希望派生类能够重新定义基类
的方法,则在基类中将该方法定义为虚方法,这样可以
启用动态联编。
内联函数的特点;使用内联函数的目的是为了提高
函数的运行效率。内联函数体的代码不能过长,因为内
联函数省去调用函数的时间是以代码膨胀为代价的。内
联函数不能包含循环语句,因为执行循环语句要比调用
函数的开销大。
13、VC中,编译工具条内的Debug与Release选项是
什么含义?
【参考答案】Debug 通常称为调试版本,它包含调试
信息,并且不作任何优化,便于程序员调试程序。
Release 称为发布版本,它往往是进行了各种优化,
使得程序在代码大小和运行速度上都是最优的,以便
用户很好地使用。Debug带有大量的调试代码,运行
时需要相应的运行库,发布模式程序紧凑不含有调试
代码和信息,直接可以运行(如果不需要运行库)
14、函数assert的用法?
【参考答案】断言assert是仅在debug版本起作用的宏
,用于检查“不应该“发生的情况。程序员可以把assert
看成一个在任何系统状态下都可以安全使用的无害测
试手段。
15、 const 与 #define 的比较 ,const有什么优点?
【参考答案】(1) const 常量有数据类型,而宏常量
没有数据类型。编译器可以对前者(const)进行类型安全检查
。而对后者只进行字符替换,没有类型安全检查,并
且在字符替换可能会产生意料不到的错误(边际效应
) 。 (2) 有些集成化的调试工具可以对 const 常量
进行调试,但是不能对宏常量进行调试。
宏只是简单替换,不做类型检查
16、请你谈谈引用和指针的区别。
【参考答案】(1)引用被创建的同时必须被初始化(
指针则可以在任何时候被初始化) 。
(2)不能有 NULL 引用,引用必须与合法的存储单元
关联(指针则可以是 NULL) 。
(3)一旦引用被初始化,就不能改变引用的关系(指
针则可以随时改变所指的对象) 。
17、有了 malloc/free 为什么还要 new/delete ?
【参考答案】malloc 与 free 是 C++/C 语言的标准库
函数,new/delete 是 C++的运算符。它们都可用于申
请动态内存和释放内存。 对于非内部数据类型的对象
而言,光用 maloc/free 无法满足动态对象的要求。对
象在创建的同时要自动执行构造函数,对象在消亡之
前要自动执行析构函数。由于malloc/free 是库函数而
不是运算符,不在编译器控制权限之内,不能够把执
行构造函数和析构函数的任务强加于 malloc/free。 因
此 C++语言需要一个能完成动态内存分配和初始化工
作的运算符 new,以及一个能完成清理与释放内存工
作的运算符 delete。注意 new/delete 不是库函数。
18、如果在申请动态内存时找不到足够大的内存块,
malloc 和 new 将返回 NULL 指针,宣告内存申请失败
。你是怎么处理内存耗尽的?
【参考答案】(1)判断指针是否为 NULL,如果是则
马上用 return 语句终止本函数。(2)判断指针是否为
NULL,如果是则马上用 exit(1)终止整个程序的运行
(3)为 new 和 malloc 设置异常处理函数。例如
Visual C++可以用_set_new_hander 函数为 new 设置
用户自己定义的异常处理函数,也可以让 malloc 享用
与 new 相同的异常处理函数。
19、C++是不是类型安全的?
【参考答案】不是。两个不同类型的指针之间可以强制
转换(用reinterpret cast)。
100条经典C++语言笔试题目
20、 const 符号常量;
(1)const char *p
(2)char const *p
(3)char * const p
说明上面三种描述的区别;
【参考答案】(1)p是一个指向const char的指针,p是可
以改变指向的,但是p指向的值是不能改变的;
(2)p指向的恰好是一个指向const的char的普通指针;
(3)p是一个指针,这个指针是指向char的const指针。
(1)和(2)的定义是一样的。
100条经典C++语言笔试题目
21、用C++写个程序,如何判断一个操作系统是16位
还是32位的?
【标准答案】定义一个指针p,打印出sizeof(p),如果节
后是4,则表示该操作系统是32位,打印结果是2,表
示是16位。
100条经典C++语言笔试题目
22、 .用C++写个程序,如何判断一个操作系统是16位
还是32位的?不能用sizeof()函数。
【参考答案】
int a = ~0;
if( a>65536 )
{
cout<<"32 bit"<<endl;
}
else
{
cout<<"16 bit"<<endl;
}
100条经典C++语言笔试题目
23、void * ( * (*fp1)(int))[10];
float (*(* fp2)(int,int,int))(int);
int (* ( * fp3)())[10]();
分别表示什么意思?
【标准答案】
1.void * ( * (*fp1)(int))[10];
fp1是一个指针,指向一个函数,这个函数的参数为
int型,函数的返回值是一个指针,这个指针指向一个
数组,这个数组有10个元素,每个元素是一个void*型
指针。
100条经典C++语言笔试题目
2.float (*(* fp2)(int,int,int))(int);
fp2是一个指针,指向一个函数,这个函数的参数为3
个int型,函数的返回值是一个指针,这个指针指向一
个函数,这个函数的参数为int型,函数的返回值是
float型。
100条经典C++语言笔试题目
3.int (* ( * fp3)())[10]();
fp3是一个指针,指向一个函数,这个函数的参数为
空,函数的返回值是一个指针,这个指针指向一个数
组,这个数组有10个元素,每个元素是一个指针,指
向一个函数,这个函数的参数为空,函数的返回值是
int型。
100条经典C++语言笔试题目
24、多态类中的虚函数表是Compile-Time,还是RunTime时建立的?
【标准答案】虚拟函数表是在编译期就建立了,各个虚
拟函数这时被组织成了一个虚拟函数的入口地址的数
组.而对象的隐藏成员--虚拟函数表指针是在运行期--也
就是构造函数被调用时进行初始化的,这是实现多态的
关键。
100条经典C++语言笔试题目
25、错误的转义字符是 ()
A.'\091' B.'\\'
C.'\0' D.'\'‘
【标准答案】A
100条经典C++语言笔试题目
26、若数组名作实参而指针变量作形参,函数调用实
参传给形参的是 ()
A.数组的长度 B.数组第一个元素的值
C.数组所有元素的值 D.数组第一个元素的地