面試準備之面試題(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函數在內存中只有一份,普通函數在每一個被調用中維持一份複製品。

相關文章
相關標籤/搜索