多型中常見的面試題

2021-09-26 06:35:07 字數 1119 閱讀 5017

1. 什麼是多型?

多型就是面對同一函式,用不同的物件去呼叫,會產生不同的結果

2. 什麼是過載、重寫(覆蓋)、重定義(隱藏)?

過載:當兩個函式同名,引數不同,且再同乙個作用域內,就叫做過載

重寫:當兩個函式同名,引數相同,返回值相同(這裡有個特例,協變例外)且在不同作用域,都是虛函式,叫做重寫

重定義:繼承時,同名函式,沒有構成重寫的條件的就叫做重定義

3. 多型的實現原理?

在物件前面加乙個虛表指標,虛表指標指向乙個虛表,這個虛標其實是乙個函式指標陣列,指向乙個個虛函式,注意,虛函式也是函式,所以它存在於**段,虛表也是如此,在繼承時,將重寫的函式在虛表中進行替換

4. inline函式可以是虛函式嗎?

5. 靜態成員可以是虛函式嗎?

答:不能,因為靜態成員函式沒有this指標,使用型別::成員函式的呼叫方式無法訪問虛函式表,所以靜態成員函式無法放進虛函式表。

6. 建構函式可以是虛函式嗎?

答:不能,因為物件中的虛函式表指標是在建構函式初始化列表階段才初始化的。

7. 析構函式可以是虛函式嗎?什麼場景下析構函式是虛函式?

答:可以,並且最好把基類的析構函式定義成虛函式,當基類中使用了資源時

8. 物件訪問普通函式快還是虛函式更快?

答:首先如果是普通物件,是一樣快的。如果是指標物件或者是引用物件,則呼叫的普通函式快,因為構成多型,執行時呼叫虛函式需要到虛函式表中去查詢。

9. 虛函式表是在什麼階段生成的,存在哪的?

答:虛函式是在編譯階段就生成的,一般情況下存在**段(常量區)的。

10. c++菱形繼承的問題?虛繼承的原理?

菱形繼承中會出現二義性問題,最後繼承兩個基類的派生類,會儲存有兩份他們繼承的基類的基類的資料,解決方法是虛繼承。

這裡是通過了b和c的兩個指標,指向的一張表。這兩個指標叫虛基表指標,這兩個表叫虛基表。虛基表中存的偏移量。通過偏移量可以找到下面的a。

11. 什麼是抽象類?抽象類的作用?

答:在虛函式後面加上=0就叫做純虛函式,包含純虛函式的類就叫做抽象類,抽象類不能例項化出物件,派生類繼承後也不能例項化出物件,只有再重寫純虛函式後,派生類才能例項化出物件。

抽象類強制重寫了虛函式,另外抽象類體現出 了介面繼承關係。

ssh中常見的筆試面試題

ssh中常見的筆試面試題 2,如果採用重定向的方式,而重定向後頁面轉向的是乙個action,那麼type中的屬性值應寫為 type redirectaction 3,struts2中解決中文亂碼的關鍵配置是 4,struts default 5,在struts2中,對於客戶端請求引數的獲取通常使用兩...

多型面試題

題目的 如下 class a public string show a obj class b extends a public string show a obj class c extends b class d extends b a a1 new a a a2 new b b b new b...

面試題 多型

多型是物件導向的第三大特性 封裝 繼承 多型 用以描述現實世界中同一事物的不同形態。比如,西服 t恤和夾克都繼承至 衣服 它們都是衣服的一種形態。多型的三個條件 子類繼承父類 子類重寫父類方法 向上轉型 此外還有抽象類的多型和介面的多型 子類繼承父類 有靜態和非靜態方法分別輸出靜態和非靜態變數,子類...