C++面试题

1.头文件中的ifndef/define/endif有什么作用?

答:这是C++中的预编译头文件的保护符,防止头文件被重复编译。

2.#include<file.h>和#include"file.h"有什么区别?

答:前者是从标准库路径下搜索和引用,后者是从当前工作路径下搜索和引用。

3.评价一下C/C++各自的特点?

答:C语言是一种结构化语言,面向过程,基于算法和数据结构,所考虑的是如何通过一个过程或函数从输入得到输出。

     C++是面向对象,基于类,对象和继承,所考虑的是如何构造一个对象模型,让这个模型能契合与之对应的问题,通过获取对象的状态信息得到输出或实现过程控制。

4.const有什么用途?

答:在C/C++中,(1)可以定义const常量 (2)修饰函数的返回值和形参

    在C++中,还可以修饰函数的定义体,定义类的const成员函数。被const修饰的东西收到强制保护,可以预防意外的变动,提高程序的健壮性。

5.const和#defind有什么区别?

答:const和#define都可以定义常量,但const用途更广。

      const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能产生意想不到的错误。

      有些集成化的调试工具可以对const常量进行调试,但不能对宏常量进行调试。

6.指针和引用的区别?

 答:指针和引用都提供了间接操作对象的功能。

       (1)指针定义的时候可以不初始化,而引用定义的时候就要初始化,和一个对象绑定,而且一经绑定,只要引用存在,就一直保持和该对象的绑定。

       (2)赋值行为的差异:指针的赋值是将指针重新指向另一个对象,引用的赋值是修改对象本身。

       (3)指针存在类型转换,而引用分const引用和非const引用,非const引用只能与同类型的对象绑定,const引用可以绑定到不同但相关类型的对象或右值。

7.在C++程序中调用被C编译器编译后的函数,为什么要加extern"C"?

答:C++支持函数重载,而C语言不支持,函数被C++编译后在符号库中的名字与C语言不同。extern"C"的目的是解决名字匹配问题,实现C和C++混合编程。

8.sizeof和strlen的区别?

答:(1)sizeof的返回值类型是size_t。

      (2)sizeof是运算符,而strlen是函数。

      (3)sizeof可以用类型做参数,其类型可以是任何类型的或者是变量、函数,而strlen的参数只能用char*作参数,而且必须是以'\0'结尾。

      (4)数组作sizeof的参数是不会退化为指针,而传递给strlen就退化为指针。

      (5)sizeof是编译时的常量,而strlen是运行时才计算出来的,且是字符串中字符的个数而不是内存大小。

9.C++中有malloc/free,为什么还有new/delete?

答:malloc/free是C/C++标准库中的函数,而new/delete是C++中的运算符。他们都可以用来动态申请和释放内存。

     对于内置类型而言,二者没多大区别。malloc申请内存时,要指定分配内存的字节数,而且不会做初始化;new申请的时候默认有初始化,同时可以指定初始化。

     对于类类型而言,malloc/free是无法满足要求的。对象在创建的时候要自动执行构造函数,消亡之前要执行析构函数。由于malloc/free是库函数而不是运算符,不再编译器控制之内,不能把执行构造函数和析构函数的任务强加给它,所以C++还需要new/delete。

 

posted on 2015-04-27 17:25  凌末  阅读(115)  评论(0编辑  收藏  举报

导航