面試題總結——第3篇

7.構造函數和析構函數可以聲明爲虛函數嘛?

構造函數不能聲明爲析構函數:虛函數的意思就是開啓動態綁定,程序會根據動態類型來選擇調用的方法,而如果將構造函數聲明爲虛函數,那我們將無法確認對象繼而進行動態綁定,換句話說就是說無法實現構造,那麼虛函數的虛表就無法構建

析構函數可以聲明爲虛函數:在類的繼承中,如果基類指針指向派生類,那麼用基類指針delete時,如果不定義虛函數,派生類中的派生部分將無法進行析構

 

 

8.多態實現的原理

首先多態實現必須依賴於兩個條件:1)子類重寫父類的虛函數 2)必須通過基類的指針或者引用來調用虛函數

實現多態的機制是通過虛函數表(函數指針的指針數組)來實現的,虛表的最後是一個nullptr

虛表的構建過程:1)子類拷貝父類的虛表 2)進行重寫過的函數指針進行相同偏移量位置的替換 3)將新增的虛函數添加在虛表結尾 key:多繼承未重寫的虛函數放在第一個繼承基類部分的虛函數表中

 

 

9.抽象類和接口的區別

抽象類是不能實例化的類,接口是一組方法集合

抽象類是本體的抽象,接口是行爲的抽象

 

1>接口不含成員變量,抽象類可以有

2>接口全是純虛函數,抽象類可以有普通函數

3>接口全是public,抽象類可以有其他權限

4>接口支持多繼承,抽象類僅支持單繼承

5>接口不能存在static方法,抽象類可以

6>繼承抽象類可以不進行重寫,而接口必須重寫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章