標籤:
1. C中static有什麼作用
(1)隱藏。 當我們同時編譯多個檔案時,所有未加static首碼的全域變數和函數都具有全域可見度,故使用static在不同的檔案中定義同名函數和同名變數,而不必擔心命名衝突。
(2)static的第二個作用是保持變數內容的持久。儲存在待用資料區的變數會在程式剛開始運行時就完成初始化,也是唯一的一次初始化。共有兩種變數儲存在靜態儲存區:全域變數和static變數。
(3)static的第三個作用是預設初始化為0.其實全域變數也具備這一屬性,因為全域變數也儲存在待用資料區。在待用資料區,記憶體中所有的位元組預設值都是0×00,某些時候這一特點可以減少程式員的工作量。
2.C++中const有什麼用?
不要一聽到const就說是常量,這樣給考官一種在和一個外行交談的感覺。應該說const修飾的內容不可改變就行了, 定義常量只是一種使用方式而已,還有const資料成員,const參數, const傳回值, const成員函數等, 被const修飾的東西都受到強制保護,可以預防意外的變動,能提高程式的健壯性。
3. C與C++各自是如何定義常量的?有什麼不同?
C中是使用宏#define定義, C++使用更好的const來定義。
區別:
1)const是有資料類型的常量,而宏常量沒有,編譯器可以對前者進行靜態型別安全檢查,對後者僅是字元替換,沒有型別安全檢查,而且在字元替換時可能會產生意料不到的錯誤(邊際效應)。
2)有些編譯器可以對const常量進行調試, 不能對宏調試。
4. 既然C++中有更好的const為什麼還要使用宏?
const無法代替宏作為衛哨來防止檔案的重複包含。
5. C++中引用和指標的區別?
引用是對象的別名, 操作引用就是操作這個對象, 必須在建立的同時有效得初始化(引用一個有效對象, 不可為NULL), 初始化完畢就再也不可改變, 引用具有指標的效率, 又具有變數使用的方便性和直觀性, 在語言層面上引用和對象的用法一樣, 在二進位層面上引用一般都是通過指標來實現的, 只是編譯器幫我們完成了轉換。 之所以使用引用是為了用適當的工具做恰如其分的事, 體現了最小特權原則。
6. 說一說C與C++的記憶體配置方式?
1)從靜態儲存地區分配。記憶體在程式編譯的時候就已經分配好,這塊記憶體在程式的整個運行期間都存在,如全域變數,static變數。
2)在棧上建立。在執行函數時,函數內局部變數的儲存單元都可以在棧上建立,函數執行結束時這些儲存單元自動被釋放。棧記憶體配置運算內建於處理器的指令集中,效率很高,但是分配的記憶體容量有限。
3)從堆上分配(動態記憶體分配)程式在啟動並執行時候用malloc或new申請任意多少的記憶體,程式員負責在何時用free或delete釋放記憶體。動態記憶體的生存期自己決定,使用非常靈活。
7. new/delete 與 malloc()/free() 的區別?
malloc() 與 free() 是C語言的標準庫函數, new/delete 是C++的運算子, 他們都可以用來申請和釋放記憶體, malloc()和free()不在編譯器控制許可權之內, 不能把建構函式和解構函式的任務強加給他們。www.cdtarena.com
8. #include<a.h>和#include"a.h" 有什麼區別?
答:對於#include <a.h> ,編譯器從標準庫路徑開始搜尋 a.h對於#include "a.h" ,編譯器從使用者的工作路徑開始搜尋 a.h
9. 在C++ 程式中調用被 C編譯器編譯後的函數,為什麼要加 extern "C"?
C++語言支援函數重載,C語言不支援函數重載。函數被C++編譯後在庫中的名字與C語言的不同。假設某個函數的原型為: void foo(int x, int y);該函數被C編譯器編譯後在庫中的名字為_foo,而C++編譯器則會產生像_foo_int_int之類的名字。C++提供了C串連交換指定符號extern"C"來解決名字匹配問題。
10. C++中的什麼是多態性? 是如何?的?
多態性是物件導向程式設計語言繼資料抽象和繼承之後的第三個基本特徵。它是在運行時出現的多態性通過衍生類別和虛函數實現。基類和衍生類別中使用同樣的函數名, 完成不同的操作具體實現相隔離的另一類介面,即把" w h a t"從"h o w"分離開來。多態性提高了代碼的組織性和可讀性,虛函數則根據類型的不同來進行不同的隔離。
11. 什麼是動態特性?
在絕大多數情況下, 程式的功能是在編譯的時候就確定下來的, 我們稱之為靜態特性。 反之, 如果程式的功能是在運行時刻才能確定下來的, 則稱之為動態特性。C++中, 虛函數,抽象基類, 動態綁定和多態構成了出色的動態特性。
12.什麼是封裝?C++中是如何?的?
封裝來源於資訊隱藏的設計理念, 是通過特性和行為的組合來建立新資料類型讓介面與具體實現相隔離。C++中是通過類來實現的, 為了盡量避免某個模組的行為幹擾同一系統中的其它模組,應該讓模組僅僅公開必須讓外界知道的介面。
13. 什麼是RTTI?
RTTI事指運行時類型識別(Run-time type identification)在只有一個指向基類的指標或引用時確定一個對象的準確類型。
14. 什麼是拷貝建構函式?
它是單個參數的建構函式,其參數是與它同屬一類的對象的(常)引用;類定義中,如果未提供自己的拷貝建構函式,C++提供一個預設拷貝建構函式,該預設拷貝建構函式完成一個成員到一個成員的拷貝
15. 什麼是深淺拷貝?
淺拷貝是建立了一個對象用一個現成的對象初始化它的時候只是複製了成員(簡單賦值)而沒有拷貝分配給成員的資源(如給其指標變數成員分配了動態記憶體); 深拷貝是當一個對象建立時,如果分配了資源,就需要定義自己的拷貝建構函式,使之不但拷貝成員也拷貝分配給它的資源。
16.物件導向程式設計的優點?
開發時間短, 效率高, 可靠性高。物件導向編程的編碼具有高可重用性,可以在應用程式中大量採用成熟的類庫(如STL),從而雖短了開發時間,軟體易於維護和升級。
常用的16個c/c++面試題