繼承與多型的相關題目

2021-09-10 06:45:32 字數 2002 閱讀 6569

1.派生類記憶體布局,繼承了基類什麼東西?

先是基類,後是派生類,並且繼承了名字作用域和除析構構造之外的所有方法

2. 類的編譯程順序,構造順序,析構順序

類的編譯程式:先編譯類名->成員名->方法體

子類的構造順序:先構造父類,在構造子類

子類的析構順序:先析構子類,後析構父類,即先構造的後析構,後構造的先析構

3.基類派生類同名成員之間的關係

過載:過載是指同乙個類中的多個方法具有相同的名字,但這些方法具有不同的引數列表,即引數的數量或引數型別不能完全相同

<1>作用域相同

<2>函式名相同

<3>引數列表不同

隱藏:子類會隱藏父類方法中同名的方法

覆蓋:子類中和父類中一樣的(同返回值,同引數列表,同名)虛成員方法構成覆蓋

4.四種型別強轉

5.虛表什麼時候產生?存放在**?

在編譯時期產生,存放在.rodata段

6.純虛函式->抽象類(抽象類不能定義物件,只能定義指標引用)

virtual void bark() = 0;不提供實現,派生類可以自己寫實際的函式,虛基類不能建構函式

7.動多型,靜多型

靜多型:編譯時期決定的多型,如:模板,過載

動多型:執行時期決定的多型,如:繼承中的多型

動多型呼叫的條件有什麼?

<1>指標呼叫或者引用呼叫

<2>該型別下的虛函式

<3>物件完整

8.基類指標指向子類物件,指標是什麼型別?*指標是什麼型別?(基類中有虛函式)

class a

};class b :public a

};int main()

定義了乙個基類的指標,指向父類的物件,結果如上所示,指標型別是class a * ,*a的型別是class b

9.基類中存在虛函式,子類就會覆蓋基類中和子類同名的虛函式,子類的記憶體布局

10.基類無虛函式,子類有虛函式。將基類指標指向子類的物件時,其指向子類物件中基類起始的部分。

11.基類定義虛函式和普通過載函式,子類定義同名函式隱藏普通函式

class base

virtual void show(int i) };

class derive :public base

};int main()

.基類指標指向堆上的子類物件,此時delete指標,子類析構函式未呼叫,有可能造成記憶體洩漏。基類析構函式應該寫成虛函式

13.基類構造清除所有資料,基類指標呼叫自己的虛函式,子類呼叫虛函式

class base

virtual void show() };

class derive :public base

void show() };

int main()

基類的物件在呼叫show函式的時候會執行出錯,當基類構造的時候將空間內所有位元組都置為0,包括vfptr,當訪問虛函式的時候就會進入位址位0的空間,訪問出錯;子類物件在呼叫show函式的時候會正常執行,雖然基類構造的時候將空間內所有位元組包括vfptr都置為0,但是子類在構造的時候將vfptr又置為自己的show函式入口位址,因此訪問正常

14.基類和派生類的建構函式、析構函式中呼叫虛函式不會產生多型呼叫。因為物件不完整,只要在建構函式之後到析構函式之前物件才是完整的。

15.基類虛函式放到共有,派生類虛函式放到私有,外部基類指標指向子類物件,能否派生類私有函式訪問?

可以,該指標是基類的指標,但是又指向子類的示例,在呼叫之前無法確定呼叫的究竟是誰

16.基類和子類給不同的虛函式傳引數預設值,定義基類指標指向子類物件,呼叫函式,此時會呼叫子類的函式,但是函式的引數預設值是基類的引數預設值。

class base

繼承 多型的相關知識

一 繼承 在php中,使用extends實現繼承。作用 如果我們不使用繼承,就要寫很多重複的 二 繼承的構造方法 1 子類繼承父類時,子類沒有構造方法,例項化子類物件時,會執行父類的構造方法。子類如果有自己的構造方法,例項化子類物件時,只會自動執行子類自己的構造方法。2 子類的構造方法有兩個引數,所...

繼承多型常見型別題目

1 類的編譯順序,類的構造順序,子類構造順序,子類析構順序 類的編譯順序 類名 成員名 方法體 子類的構造順序 先構造父類,再構造子類 子類的析構順序 先析構子類,再析構父類 2 過載,隱藏,覆蓋 過載 1 作用域相同 2 函式名相同 3 引數列表不同 隱藏 子類隱藏父類同名的方法 覆蓋 子類覆蓋父...

繼承與多型

繼承 繼承是c 語言支援 重用及多型的重要機制。通過繼承,可以繼承可以在現有類的基礎上派生出新類,新類將共享現有類的成員,並且還可以新增新的成員。c 語言中,重用主要表現為可以使用現成的類 如.net框架類庫中的類 來定義新類,主要方法有組合和繼承兩種 繼承是物件導向程式設計支援 重用的另乙個重要機...