面试准备之面试题(C++) (一)
1. 条件比较语句
假设flag为布尔型变量,则下面两种写法:
if(flag==TRUE) if(flag==FALSE)
if(flag) if(!flag)
下面一种更好,根据布尔类型的定义,零值为假(记为FALSE),而任何非零值为真(记为TRUE)。然而TURE的值究竟是什么并没有统一的标准,例如在Visual C++中将TRUE定义为1,而Visual Basic则将TRUE定义为-1。因此最好不要将布尔变量直接与TRUE或FALSE进行比较
假设x为浮点型变量,则下面两种写法:
if(x == 0.0) if(x != 0.0)
if((x>=-EPSINON)&&(x<=EPSINON)) if((x<-EPSINON)||(x>EPSINON))
下面一种风格更好,无论是float还是double类型的变量,都有精度限制,所以尽量避免将浮点型变量用“==”或“!=”与数字比较,应该设法转换成“>=”或“<=”的形式。
2. C和C++的区别和联系
C++是从C基础上发展而来的,且大大扩充了C的内容和功能,提供了更多更全面的支持。C是一个结构化语言,它的重点在于算法和数据结构。对语言本身而言,C是C++的子集。
C程序的设计首要考虑的是如何通过一个过程,对输入进行运算处理得到输出。C++首要考虑的是如果构造一个对象模型,让这个模型能够配合对应的问题,这样就可以通过获取对象的信息得到输出或实现过程控制。C++相对于原来的C,引入了重载,内联函数,异常处理等,C++拓展了面向对象涉及的内容如类、继承、虚函数、模板和包容器等。C++中,不仅需要考虑数据封装,还需要考虑对象粒度的选择、对象接口的设计和继承、组合与继承的使用等问题。
在C++中也完全可以写出C一样的过程化的程序,所以只能说C++拥有面向对象的特性。
3. #include <head.h>和#include "head.h"的区别
<>表明括号中的文件是一个库或标准头文件。查找过程会首先检查预定义的目录,开发者可以通过设置搜索路径环境变量或命令行选项来修改这些目录。
“”表明该头文件是用户提供的头文件,查找该文件时将从当前文件目录或文件名制定的其他目录中寻找,然后再在标准位置寻找。
4. C++中main函数执行完后还执行其他语句吗?
在程序退出的时候经常需要做些注入释放资源的操作,但程序退出的方式有很多种,例如main()函数运行结束、在程序的某个地方用exit()结束程序、用户通过快捷键Ctrl+C等操作发信号来终止程序等,因此需要一种与程序退出方式无关的方法来进行程序退出时的必要处理。atexit()函数用来注册程序正常终止时要被调用的函数。
atexit()函数的参数是一个函数指针,函数指针指向一个没有参数也没有返回值的函数。atexit()的函数原型如下:int atexit(void(*)(void))。一个程序中最多可以用atexit()注册32个处理函数,这些处理函数的调用顺序与其注册顺序相反。(使用atexit()函数,记得添加stdlib头文件)
#include <iostream> #include <cstdlib> using namespace std; void function1(); void function2(); int main() { atexit(function1); atexit(function2); cout << "Main is exiting ..." << endl; return 0; } void function1() { cout << "Calling function1 ... " << endl; } void function2() { cout << "Calling function2 ... " << endl; }
5. const与#define的各自特点及区别
#define只能用来作文本替换,在程序编译时期执行,因此#define常量的生命周期止于编译器,它存在于程序的代码段。
const常量存在于程序的数据段,并在堆栈中分配了空间。const常量是一个运行时的概念,它在程序运行过程中确实的存在并可以被调用、传递。另外,const常量有数据类型,#define常量没有数据类型,编译器可以对const常量进行类型安全检查。
6. static的作用?static全局变量与普通全局变量,static局部变量与普通局部变量,static函数与普通函数的区别?
C++中,static有3个明显的作用:在函数体内,一个被声明为静态的变量在函数被调用的过程中维持其值不变;在模块内(但在函数体外),一个被生命为静态的变量可以被模块内所有函数访问,但不能被模块外其他函数访问;在模块内,被声明为静态的函数只能被这一模块内的其他函数调用,即函数被限制在声明它的模块范围内。
static全局变量与普通全局变量的区别是:static全局变量只初始化一次,其作用于限制在文件内。static局部变量与普通局部变量的区别是:static局部变量只被初始化一次,会保存上一次执行的值。static函数与普通函数的区别是:static函数在内存中只有一份,普通函数在每个被调用中维持一份复制品。