C++筆試面試題收錄

1.c和c++中struct有什麼區別?
    ①.c中沒有保護權限,不能定義函數,但能夠有函數指針。
    ②.c++中有保護權限默認是private,能夠定義函數。
2.c++中的struct和class有什麼區別?
    ①.繼承權限不一樣:struct 按照public權限繼承而class按照private權限繼承。
    ②.成員的默認訪問權限不一樣:class的成員默認是private權限,struct的成員默認是public。
3.引用和指針有什麼區別?
    ①.經過指針變量操做指針指向的目標屬於間接操做。
    ②.引用自己就是目標變量的別名,對引用的操做就是操做目標自己。
    ③.引用在定義時必須初始化,並且綁定對象後不能更改。指針則沒必要。
    ④.不存在空的引用。但能夠存在指向空值的指針。
4.c++中值得傳遞方式有幾種?
    ①.值傳遞
    ②.地址傳遞
    ③.引用傳遞
5.什麼是內聯函數,應用什麼實現?
    ①.內聯函數(就是對於一個頻繁使用的短小函數)用關鍵字inline(內聯函數要作參數類型檢查)
    ②.c中使用宏定義(宏是原樣替換,不作類型檢查),
    ③.宏定義和內聯函數存在本質的區別,轉換的時候應考慮是否轉換後功能是否正常。
6.c++中virtual 與inline的含義分別是什麼?
    ①.virtual 關鍵字,類成員函數聲明前加virtual關鍵字修飾,則該成員函數爲虛函數。
    ②.inline 關鍵字,在函數定義前加inline修飾,則該函數爲內聯函數。
    note:inline 是一種用於實現的關鍵字,而不是用於聲明的關鍵字。
7.函數assert的用法?
    ①.assert爲斷言。僅在Debug版本起做用,用於檢查不應發生的狀況。
      當值爲假時,現向stderr打印一條出錯信息。而後調用abort終止程序。
8.const 與 #define比較,有什麼優勢?
    ①.宏常量沒有數據類型而const有數據類型,編譯器可對其進行類型安全檢查。
    ②.有些調試工具能夠對const常量調試,而不能對宏常量調試。
9.malloc/free 與 new/delete的區別?
    ①.malloc/free是c++標準庫函數,new/delete是c++的運算符。兩者均可以動態申請內存和釋放內存
    ②.malloc/free沒法知足動態對象的要求,即構造函數與析構函數的自動執行。因此出現了new/delete
    note:new/delete 不是庫函數。
10.c++是否是類型安全的?
    ①.不是,不一樣類型能夠進行強制轉換。
11.c++中const關鍵字?
    ①.const修飾變量: 該變量爲只讀變量,const變量必須初始化。
    ②.const修飾指針:
        1)修飾指針指向的變量:指針指向的變量爲只讀變量,不能經過指針修改變量的值,但能夠改變指針的指向。
            eg: const int *p;
        2)修飾指針自己:即該指針爲常量型指針,不能修改其指向,能夠經過指針修改指向變量的值
            eg:int * const p;
    ③.const 修飾形參變量:函數內部不可以改變這個參數的值。
    ④.const 修飾返回值:主要用於函數返回const引用,不可以經過函數返回的引用對實際對象進行任何修改。
11.c++中static關鍵字?
    ①.修飾全局變量:限制該變量做用域。只能做用域本文件,即便其餘文件用extren聲明也不能夠。
    ②.修飾局部變量:延長變量生命週期到程序結束。
    ③.修飾函數:限制做用域,只能做用域本文件,即便其餘文件用extren聲明也不能夠。
    ④.修飾類成員函數.該成員函數爲靜態成員函數,沒有this指針,它僅能訪問類的靜態數據和靜態成員函數。
    ⑤.對於類的成員函數,有時候必須指定其返回值爲const類型,以使得其返回值不爲「左值」。
12. 什麼是多態?
    ①.定義:「一個接口,多種方法」,程序在運行時才決定調用的函數。
    ②.實現:多態主要經過虛函數實現。
    ③.目的:接口重用。
    ④.用法:聲明基類指針,利用該指針指向任意一個子類對象,調用相應的虛函數,能夠根據指向的子類的不一樣而實現不一樣的方法。
13.多態類中的虛函數表什麼時候創建的?
    ①.虛函數表是在編譯時創建的,各個虛擬函數這時被組織成了一個虛擬函數的入口地址的數組。
        虛表指針是在運行期,也就是構造函數被調用時進行初始化的。是實現多態的關鍵。
14.    sizeof一個空類的大小?
    ①.類的實例化是在內存中分配一塊地址,每一個實例在內存中都有獨一無二的二地址。
        一樣,空類也會實例化,因此編譯器會給空類隱含的添加一個字節,這樣空類實例化後就有獨一無二的地址了。
        因此,空類的sizeof爲1,而不是0.
15.內存分配指針的方式有幾種?
    ①.從靜態存儲區分配:例如全局變量。程序結束釋放。
    ②.棧區建立,局部變量等在函數執行結束自動釋放。
    ③.堆區分配,即動態分配,又malloc或new 申請,free或delete釋放,生存週期由程序員控制。
16.全局變量和局部變量的區別,編譯器如何識別?
    ①.生命週期不一樣:
        全局變量隨主程序的建立而建立,銷燬而銷燬。
        局部變量在局部函數內,函數結束就銷燬。
    ②.編譯器經過內存分配的位置識別,全局變量分配在全局數據段,局部變量分配在棧區。
17.Heap與Stack的差異?
    ①.Heap是堆,空間由程序員手動分配與釋放。stack是棧,
    ②.stack是棧,空間由系統自動分配與釋放。
18.c++中explicit關鍵字
    ①.explicit關鍵字用於修飾類的構造函數,代表該類的構造函數是顯示,使用者必須顯示調用。
19.    重複屢次fclose一個打開過一次的FILE *fp指針會有什麼結果?請解釋。
    ①.致使文件描述符結構中的指針被重複釋放,進而致使不可預期的異常。
20.面向對象的三個基本特徵,並簡單敘述。
    ①.封裝:將客觀事物抽象成類,每一個類對自身的數據和方法實行保護(protect private public)
    ②.繼承:廣義上的繼承有三種方式:
            1)實現繼承(指的是使用基類的屬性和方法而無需額外編碼的能力)
            2)可視繼承(子窗體使用父窗體的外觀和實現代碼)
            3)接口繼承(僅使用屬性和方法,實現滯後到子類實現。
            前兩種(類繼承)和後一種(對象組合=>接口繼承以及純虛函數)構成了功能複用的兩種方式。
    ③.多態:是將父對象設置成爲和一個或更多的與他的子對象相等的技術。
    父類指針能夠根據子類對象的特性以不一樣的方式運做。簡單說就是容許將子類類型的指針賦值個父類類型的指針。
    簡而言之,就是接口重用。
21.多態的做用?
    ①.隱藏實現細節,是的代碼可以模塊化;擴展代碼模塊,實現代碼重用。
    ②.接口重用:爲了類在繼承和派生的時候,保證使用家族中任一類實例的某一屬性時的正確調用。
22.重載、覆蓋、隱藏 的區別?
    ①.重載:同一個名字空間 容許存在函數名相同,參數列表不一樣。
    ②.覆蓋:不一樣名字空間 用於繼承,子類從新定義父類虛函數的方法
    ③.隱藏:不一樣名字空間 派生類與基類的函數同名,屏蔽基類的函數。
23.c++裏面是否是全部的動做都是由main()函數引發的?
    ①.全局變量的初始化。
24.    析構函數的用法和做用?
    ①.析構函數是特殊的成員函數,沒有返回類型,沒有參數,在對象銷燬時有系統自動調用。
    ②.析構函數能夠被virtual修飾(構造函數不能virtual修飾,不存在虛構造)
25.c++中爲何用模板類?
    ①.編譯時檢查數據類型,保證類型安全。
    ②.具備很高的複用性,移植性
    ③.可用於建立動態增加和減少的數據結構。
26.字符指針、浮點數指針、以及函數指針這三種類型的變量哪一個佔用的內存最大?
    ①.32位系統下,不論是指向何種對象的指針變量都佔4字節。
27.你是如何使用return語句的?
    ①.return語句不能返回指向 棧內存的指針或者引用。由於該內存會在函數結束時自動銷燬。
    ②.須要明白咱們須要返回的是指針仍是引用。
28.delete 與 delete[]的區別?
    ①.delete只會調用一次析構函數,而delete[]會調用每個成員的析構函數。
29.子類析構時要調用父類析構函數嗎?
    ①.構造函數調用順序:先調用父類構造函數,在調用子類構造函數。
    ②.析構函數調用順序:先調用子類析構函數,在調用父類析構函數。
30.虛函數、純虛函數?
    ①.虛函數:virtual關鍵字修飾,容許派生類對基類虛函數從新定義
    ②.純虛函數:在基類中保留函數名字,派生類根據須要對它從新進行定義。擁有純虛函數的類稱爲抽象類。抽象類不予許建立對象實例。c++

31.進程與線程的差異:
  線程是進程內的一個執行單元,也是進程內的可調度實體。
    與進程的區別:
    ①.調度:線程做爲調度和分配的基本單位,進程做爲擁有資源的基本單位。
    ②.擁有資源:進程是擁有資源的獨立單位,線程不擁有系統資源,但能夠訪問隸屬於進程的資源
    ③.系統開銷:在建立或撤銷進程時,系統須要爲進程分配和回收資源,開銷明顯大於建立或撤消線程時的開銷
32.網絡編程中設計併發服務器,使用多進程與多線程    ,請問有什麼區別。
    ①.進程:子進程得到父進程數據空間、堆和棧的複製品
    ②.線程:線程是一個更加接近與執行體的概念,它能夠與同進程的其餘線程共享數據,但擁有本身的棧空間,擁有獨立的執行序列。
    二者均可以提升系統併發度,提升程序的運行效率。
    各有優缺點:線程開銷小,但不利於資源保護,進程則相反。進程多用於分佈式。程序員

相關文章
相關標籤/搜索