面试准备之面试题(C++) (一)

1. 条件比较语句ios

    假设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++的子集。spa

    C程序的设计首要考虑的是如何经过一个过程,对输入进行运算处理获得输出。C++首要考虑的是若是构造一个对象模型,让这个模型可以配合对应的问题,这样就能够经过获取对象的信息获得输出或实现过程控制。C++相对于原来的C,引入了重载,内联函数,异常处理等,C++拓展了面向对象涉及的内容如类、继承、虚函数、模板和包容器等。C++中,不只须要考虑数据封装,还须要考虑对象粒度的选择、对象接口的设计和继承、组合与继承的使用等问题。命令行

    在C++中也彻底能够写出C同样的过程化的程序,因此只能说C++拥有面向对象的特性。设计

3. #include <head.h>和#include "head.h"的区别指针

    <>代表括号中的文件是一个库或标准头文件。查找过程会首先检查预约义的目录,开发者能够经过设置搜索路径环境变量或命令行选项来修改这些目录。code

    “”代表该头文件是用户提供的头文件,查找该文件时将从当前文件目录或文件名制定的其余目录中寻找,而后再在标准位置寻找。

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函数在内存中只有一份,普通函数在每一个被调用中维持一份复制品。