2019c/c++校招100题

这是一篇关于C++面试的资料,包含了100道经典的笔试题目,涵盖C++语言特性、面向对象、内存管理、函数、类和对象、多态、异常处理等多个方面。内容包括对指针、引用、虚函数、内存分配、数据结构、运算符重载等基础知识的深入理解和应用,适合准备C++面试的开发者参考。
摘要由CSDN通过智能技术生成

 

 

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.数组第一个元素的地

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值