C 多型類面試題

2021-10-01 18:42:02 字數 1696 閱讀 9588

什麼是多型?

答: 不同的物件完成相同的事件(具有相同的函式),產生不同的結果(函式內部實現不同)。

什麼是過載、重寫、重定義?

作用域函式名、引數、返回值的要求

其它的要求

過載兩個函式在同一作用域

函式名、引數相同

重寫(覆蓋)

兩個函式分別在基類和派生類的作用域

函式名、引數、返回值都相同

兩個函式必須是虛函式

重定義(隱藏)

兩個函式分別在基類和派生類的作用域

函式名相同

基類和派生類的同名函式不構成重寫就是重定義

多型的實現原理?

答: 通過虛基表實現。

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

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

析構函式可以是虛函式嗎?虛函式可不可以定義成static型別的函式?

答:不可以。虛函式的位址要存到虛表中去,static不用物件就可以呼叫,那麼沒有物件,就沒有虛表指標,就找不到虛表了。沒有虛表就肯定不能實現多型。沒有物件,就沒有this指標,所以虛函式就是為了實現出多型,定義成static靜態函式就找不到虛表,實現不了多型。

內聯函式不能是虛函式 正確

虛函式可以定義成內聯函式嗎?

答:不可以。內聯函式沒有位址,每次用到內聯函式的時候,都是在呼叫的地方進行了展開,普通函式有位址,呼叫的時候彙編**中就call(呼叫的意思)一下普通函式的位址,但是內聯函式是沒有位址的, 在呼叫地方進行了展開。無法把位址放到虛函式表中

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

答: 虛函式表示在編譯階段就生成了。 一般情況下存在**段中(常量區中)

虛函式表(虛表)、虛表指標、虛函式都是存在哪的?

答: 虛函式(virtual修飾的函式)和普通函式一樣都存在**段中, 虛表指標存在於物件中(指向虛表),虛表經驗證是存在於**段(常量區)中。

虛函式表(虛表)、虛表指標、虛函式之間的關係?

答:虛表指標是存在於物件中,虛表指標指向虛表,即虛表指標就是虛表的首位址。虛表是乙個函式指標陣列,虛表中存放的都是類中的虛函式的位址。實現多型的時候,通過虛表指標,找到虛表,在通過虛表找到虛函式的位址,呼叫虛函式。

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

答: 1. 如果是普通物件,一樣快。因為普通物件呼叫,是普通呼叫,只與型別有關 ;

2. 如果是指標物件或者是引用物件,則呼叫普通函式塊,因為構成多型,執行時呼叫虛函式需要到虛函式表中去查詢。

c++菱形繼承是什麼? 虛繼承的原理?

答: 多繼承: 乙個子類有兩個或以上直接父類時稱這個繼承關係為多繼承。菱形繼承是多繼承的一種情況。 這個子類的兩個或以上的直接父類同時又有相同的直接父類。 這就是菱形繼承

菱形虛擬繼承解決的是資料冗餘和二義性的原理。虛繼承是通過虛基表指標

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

答: 抽象類是含有純虛函式的類。 抽象類的作用是:強制了派生類重寫虛函式,另外體現出了介面繼承(見鏈結)

C 多型面試題

答 多型是物件導向的重要特性之一,它是一種行為的封裝,是同一種事物所表現出的多種形態,簡單地說是 乙個介面多種實現 有兩種型別的多型性 編譯時的多型性。編譯時的多型性是通過過載來實現的。執行時的多型性。執行時的多型性是通過虛成員實現的。1.從儲存空間角度。虛函式對應乙個vtable,這個vtable...

多型面試題

題目的 如下 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恤和夾克都繼承至 衣服 它們都是衣服的一種形態。多型的三個條件 子類繼承父類 子類重寫父類方法 向上轉型 此外還有抽象類的多型和介面的多型 子類繼承父類 有靜態和非靜態方法分別輸出靜態和非靜態變數,子類...