21 個最常閱讀的 C++ 面試問題和答案 [針對新生]

已發表: 2020-12-17

即使在今天,C++ 仍然像 80 年代一樣流行。 這種通用、編譯和多範式(面向對象、過程和功能)的編程語言在 IT 行業,特別是在軟件開發中起著至關重要的作用。

世界各地的開發人員使用 C++ 來構建系統軟件、數據庫軟件、嵌入式軟件、企業應用程序、基於 GUI 的應用程序、編譯器、高級計算和圖形、操作系統、瀏覽器、遊戲、雲系統等。自然,C++ 仍然是高度相關的編程語言。

在這篇文章中,我們創建了一個包含 21 個 C++ 面試問題的列表,如果你渴望在軟件開發領域建立職業生涯,你應該知道這些問題。 這些 C++ 面試問題和答案將幫助你打破這個主題的僵局!

C++ 面試問答

  1. 定義“類”和“對象”。

在 C++ 中,類是反映不同實體、動作和特性的用戶定義數據類型。 一個類包含數據成員及其功能。 對這些數據成員和函數的訪問由三個修飾符定義——private、public 和 protected。 雖然類定義了數據類型,但它們僅指定數據結構而不是定義數據。

對像是類的一個實例。 它是一個運行時實體,可以代表人、地點或事物。

對像對數據成員和成員函數進行操作。 它包含字段、方法和構造函數。 例如,雖然汽車是一個物體,但它的各種特徵,如車輪、設計、顏色、支架等,都是其類的實例。

  1. 什麼是“訪問說明符”?

訪問說明符確定如何在類範圍之外訪問類的成員(函數和變量)。 C++ 具有三種類型的訪問說明符

  • Private——私有說明符意味著類成員只能在聲明它們的同一個類中訪問。 在這種情況下,子類不能訪問父類的私有成員。
  • 受保護的——受保護的說明符允許子類訪問父類的受保護數據成員。
  • Public – 聲明為“public”的類成員可以在整個 C++ 代碼中訪問。
  1. 什麼是可變存儲類說明符?

可變存儲類說明符僅適用於類的非靜態和非常量成員變量,用於通過聲明來更改常量類對象的成員。

  1. 什麼是封裝?

封裝是指在一個類中包裝或綁定數據成員及其函數。 此過程是出於安全原因完成的,因為它限制了來自任何外部方法的訪問。 如果數據成員是私有的,則只有其成員函數才能訪問數據。

  1. 什麼是抽象?

抽像是隱藏內部實現並僅顯示基本細節的過程。 對數據成員和函數的訪問取決於所使用的修飾符。 因此,如果使用 public 關鍵字來定義成員,則任何人都可以訪問它們。 但是,如果 private 關鍵字定義了成員,則無法通過外部方法訪問它們。

  1. 什麼是命名空間?

命名空間有助於代碼的邏輯劃分。 它在 C++ 程序中用於通過為標識符分配不同的命名空間來防止/解決標識符的命名衝突。 命名空間定義了聲明標識符(變量、類和函數)的範圍。 因此,使用命名空間的主要目的是消除代碼中的歧義。

  1. 定義“多態性”。 C++中有多少種多態性?

從字面上看,多態性意味著存在多種形式。 在 C++ 中,當多個函數以相同的名稱存在但具有不同的功能時,就會發生多態性。

多態性有兩種類型:

  • 動態多態性,又名 C++ 中的“覆蓋”,可幫助您確定必須在運行時而不是編譯時執行的函數方法。 函數重載是動態多態性的一個很好的例子。 在函數覆蓋中,子類包含父類中已經存在的方法。 因此,子類覆蓋了父類的方法。 在這種情況下,父類和子類都擁有具有不同定義的相同函數。
  • 靜態多態是在代碼編譯時實現的(因此也稱為編譯時多態)。 方法重載是靜態多態性的完美例子。 方法重載允許存在多個具有相同名稱但具有不同功能的函數。
  1. 解釋“Volatile”關鍵字的用途。

“volatile”函數用於聲明特定變量是 volatile。 這指示編譯器在外部更改變量,從而避免編譯器對變量引用進行優化。

閱讀: Java 面試問答

  1. 什麼是內聯函數?

任何在函數定義前以“inline”關鍵字作為前綴的函數都是內聯函數。 它們主要用於減少函數調用開銷。 當調用內聯函數時,整個代碼將被插入或替換在內聯函數調用的特定點。 由於編譯器將內聯函數視為宏,因此它們的執行速度要快得多。 因此,聲明小的內聯函數有助於提高代碼的效率。

內聯函數的標準語法是:

內聯返回類型函數名稱(參數)

{

// 函數代碼放在這裡

}

  1. 什麼是“this”指針?

在 C++ 中,“this”指針是一個常量指針,包含當前對象的內存地址。 它作為隱藏參數傳遞給所有非靜態成員函數調用。 此外,該指針在所有非靜態函數的主體中都存在一個局部變量。

閱讀:SQL 面試問答

  1. C++ 是否有字符串原始數據類型?

C++ 不能具有字符串原始數據類型,而是具有來自標準模板庫 (STL) 的類。

  1. 作用域解析算子的作用是什麼?

範圍解析運算符有兩個目的:

  • 它有助於解決全局變量的範圍。
  • 當一個函數在類之外定義時,作用域解析運算符將該函數與該類相關聯。
  1. 什麼是析構函數?

類的成員函數稱為析構函數。 它的名稱與類名相同,但以波浪號 (~) 作為前綴。 每當一個對象失去其作用域時,析構函數就會自動執行。

  1. 解釋關鍵字類和關鍵字結構之間的區別。

關鍵字 class 默認代表私有成員,而關鍵字 struct 默認類似於公共成員。

  1. 定義一個純虛函數。

純虛函數是不包含任何定義的函數。 只需要通過在聲明中賦值0來聲明純虛函數。 C++ 中的抽像類至少有一個純虛函數。

純虛函數的標準語法是:

虛空 abc()=0; //純虛函數。

查看: 15個面試技巧,讓你在求職面試中脫穎而出

  1. 類模板的目的是什麼?

類模板用於創建一系列類和函數。 例如,您可以創建一個數組類的模板,該模板將允許您創建一個包含各種類型(int、float 等)的數組。 您還可以為函數創建模板。 因此,如果有 add() 函數,您可以創建多個版本的 add()。

  1. “溢出錯誤”是什麼意思?

溢出錯誤是當數學計算的輸出大於系統分配的實際空間時發生的算術錯誤。

  1. delete 和 delete[ ] 有何不同?

delete 函數釋放使用“new”運算符分配的單個內存單元,而 delete[ ] 釋放由 new[ ] 運算符分配的已分配內存數組。

  1. C++ 中 vTable 和 vptr 的用途是什麼? 編譯器如何處理它們?

在 C++ 中,vTable 包含函數指針。 另一方面,vptr 是分配給 vTable 的指針。 雖然每個類都有一個 vTable,但每個對像都有一個 vptr。 C++ 編譯器在兩個地方添加了額外的代碼來有效地使用和維護 vTable 和 vptr:

在每個構造函數中設置正在創建的對象的 vptr 並指向一個類的 vTable。

在具有多態函數調用的代碼中。 編譯器在聲明多態調用的每個位置插入代碼,以使用基類指針/引用搜索 vptr。 一旦獲得vptr,就可以訪問派生類的vTable。 您可以使用 vTable 訪問和調用派生類函數 show()。

  1. 在 C++ 中,自動變量存儲在哪裡?

默認情況下,所有局部變量都是自動變量,並存儲在堆棧內存中。

  1. 如何從 DLL 中導出函數?

從 DLL 導出函數有兩種方法:

  • 您可以使用 DLL 的類型庫。
  • 您可以從 DLL 實例中引用該函數。

報名參加世界頂尖大學的軟件工程課程獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

結論

這些 C++ 問題和答案是求職面試中最常見的一些問題。 儘管我們只列出了幾個問題,但這應該讓您對如何準備 C++ 面試有一個大致的了解。

如果您有興趣了解有關全棧軟件開發的更多信息,請查看 upGrad 和 IIIT-B 的全棧軟件開發執行 PG 計劃,該計劃專為工作專業人士設計,提供 500 多個小時的嚴格培訓、9 個以上的項目和任務、IIIT-B 校友身份、實用的實踐頂點項目和頂級公司的工作協助。

成為全棧開發人員

立即申請軟件工程碩士