1. 程式人生 > >【面試】C++多型問題集錦

【面試】C++多型問題集錦

什麼是多型

答:多型是面向物件的重要特性之一,它是一種行為的封裝,是同一種事物所表現出的多種形態,簡單地說是”一個介面多種實現“

多型的作用

答:多型技術允許將父類設定成和他的一個或更多的子物件相等。

多型的分類

答:有兩種型別的多型性:

  • 編譯時的多型性。編譯時的多型性是通過過載來實現的。
  • 執行時的多型性。執行時的多型性是通過虛成員實現的。

在C++中如何實現多型

答:多型有動態多型,靜態多型,函式多型和巨集多型等。
  動態多型基於繼承機制和虛擬函式來實現的。
  靜態多型引入了泛型的概念。
  函式多型基於函式過載。
  巨集多型基於巨集替換。

為什麼要引入抽象基類和純虛擬函式

答:
- 為了方便使用多型特性
- 在很多情況下,基類本身生成物件是不合理的。
補充:純虛擬函式在基類中是沒有定義的,必須在子類中加以實現。
  如果基類含有一個或多個純虛擬函式,那麼它就屬於抽象基類,不能被例項化。

虛擬函式與純虛擬函式有什麼區別

答:
- 虛擬函式:如果一個類中聲明瞭虛擬函式,這個函式是實現的,他的作用是為了能讓這個函式在他的子類裡面能被覆蓋,這樣就可以實現動態多型。
- 純虛擬函式只是一個介面,是個函式的宣告而已,他留在子類中實現。
- 虛擬函式在子類中可以不過載
- 純虛擬函式必須在子類中實現
- 虛擬函式的類用作”實現繼承“,即繼承介面的同時也繼承了父類的實現。
- 純虛擬函式用於”介面繼承“,即純虛擬函式關注的是介面的統一性,實現由子類完成
- 帶純虛擬函式的類叫做虛基類,這種類不能直接生成物件。

虛解構函式的作用

答:虛解構函式保證了在析構時,避免只調用基類解構函式而不呼叫派生類解構函式的情況,保證資源正常釋放,避免了記憶體釋放。只有當一個類被用來作為基類的時候,才會把解構函式寫成虛擬函式

類成員函式中過載/重寫(覆蓋)/重定義(隱藏)的區別?

答:分別簡單講述一下函式過載,函式覆蓋,函式隱藏的概念與特徵:
函式過載:過載函式通常用來命名一組功能相似的函式

1.函式要在相同的類域
2.函式的名字要相同
3.函式的引數列表或返回值不同

函式覆蓋:覆蓋是指派生類函式覆蓋基類函式

1.函式是要在不同的類域
2.兩個函式的名稱相同
3.基類函式必須是虛擬函式
3.兩個函式的引數相同

函式隱藏:指派生類的函式遮蔽了與其同名的基類函式

1.兩個函式在不同的類域
2.函式名稱相同
3.函式引數不同
4.如果派生類函式與基類函式引數相同,但是在基類函式中沒有virtual關鍵字,發生函式隱藏

什麼多型?說說你對多型的理解or多型有什麼作用?

答:
  多型: 即一個介面多種實現

  理解的多型:多型是面向物件的三大特性之一。多型分為靜態多型及動態多型。
  靜態多型包含函式過載與泛型程式設計,靜態多型是程式呼叫函式,編譯器決定使用哪個可執行程式碼塊。
  動態多型是由繼承機制及虛擬函式實現的。通過指向派生類的基類指標或引用,訪問派生類中同名覆蓋成員函式。

  多型的作用:把不同的子類物件都當作父類來看,可以遮蔽不同子類物件之間的差異,寫出通用的程式碼,做出通用的程式設計,以適應需求的不斷變化。

請實現一個簡單的多型繼承關係?並講解一下C++的多型是怎麼實現的?

用C語言模擬實現C++多型呼叫