繼承多型常見型別題目

2021-09-09 02:29:37 字數 2000 閱讀 4355

1、類的編譯順序,類的構造順序,子類構造順序,子類析構順序

類的編譯順序:類名 ---> 成員名 ---> 方法體

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

子類的析構順序:先析構子類,再析構父類

2、過載,隱藏,覆蓋

過載:1、作用域相同

2、函式名相同

3、引數列表不同

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

覆蓋:子類覆蓋父類相同的虛成員方法

3、四種型別強轉

4、虛表什麼時候產生?存放在**?

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

5、動多型、靜多型

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

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

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

指標呼叫,或引用呼叫

該型別下的虛函式

物件完整

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

父類:a 子類:b

指標:class a*型別

*指標:class b型別

class a

};class b : public a

};int main()

8、基類存在虛函式,子類覆蓋,子類的記憶體布局

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

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

class base

virtual void show(int i) };

class derive : public base

};int main()

11、基類指標指向堆上的子類物件,此時delete指標,子類析構函式未呼叫,有可能造成記憶體洩漏。基類析構函式應寫成虛函式12、基類構造清除所有資料,基類指標呼叫自己的虛函式,子類呼叫虛函式

class base

virtual void show() };

/*vfptr 00000000

*/class derive : public base

void show() };

int main()

13、基類和派生類的建構函式、析構函式中呼叫虛函式,不會產生多型呼叫  不會,因為此時物件不完整(物件在建構函式結束到析構函式之前是完整的)

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

可以,因為該指標是基類的指標,但是其又可以指向子類的示例,因此在呼叫之前(進入虛函式表中函式位址之前)無法確定呼叫的究竟是誰

class base

};class derive : public base

};int main()

15、基類和子類給不同的虛函式函式引數預設值,基類指標指向子類物件,呼叫函式。此時會呼叫子類的函式,但是函式的引數預設值是基類中函式的引數預設值

class base

};class derive : public base

};int main()

繼承與多型的相關題目

1.派生類記憶體布局,繼承了基類什麼東西?先是基類,後是派生類,並且繼承了名字作用域和除析構構造之外的所有方法 2.類的編譯程順序,構造順序,析構順序 類的編譯程式 先編譯類名 成員名 方法體 子類的構造順序 先構造父類,在構造子類 子類的析構順序 先析構子類,後析構父類,即先構造的後析構,後構造的...

C 多型 繼承多型

什麼是多型?個人理解為 在程式語言繼承關係中,子類能替代父類,表現出不同的行為。換句話說 在繼承關係中,乙個類被例項化被其子類替代,子類中有父類的虛方法重寫,或者有父類同名方法 new 呼叫相同方法時候,將表現出子類或者父類中不同行為 老闆,上 static void main string arg...

繼承和多型中常見的問題(一)

繼承和多型中常見的問題 一 一 繼承 的復用。繼承允許我們依據另乙個類來定義乙個類,這使得建立和維護乙個應用程式變得更容易。這樣做,也達到了重用 功能和提高執行時間的效果。1 繼承的方式 由於c 中有三種訪問限定符,public,private,protected.因此在類與類的繼承中也將有這三種方...