總結 多型與繼承 要點

2021-10-03 20:25:10 字數 3003 閱讀 6162

什麼是多型

答:多型是物件導向的重要特性之一,它是一種行為的封裝,是同一種事物所表現出的多種形態,簡單地說是」乙個介面多種實現「

多型的作用多型的分類

答:有兩種型別的多型性:

編譯時的多型性。編譯時的多型性是通過過載來實現的。

執行時的多型性。執行時的多型性是通過虛成員實現的。

在c++中如何實現多型

答:多型有動態多型,靜態多型,函式多型和巨集多型等。

動態多型基於繼承機制和虛函式來實現的。

靜態多型引入了泛型的概念。

函式多型基於函式過載。

巨集多型基於巨集替換。

為什麼要引入抽象基類和純虛函式

答:- 為了方便使用多型特性

- 在很多情況下,基類本身生成物件是不合理的。

補充:純虛函式在基類中是沒有定義的,必須在子類中加以實現。

如果基類含有乙個或多個純虛函式,那麼它就屬於抽象基類,不能被例項化。

虛函式與純虛函式有什麼區別

答:- 虛函式:如果乙個類中宣告了虛函式,這個函式是實現的,他的作用是為了能讓這個函式在他的子類裡面能被覆蓋,這樣就可以實現動態多型。

- 純虛函式只是乙個介面,是個函式的宣告而已,他留在子類中實現。

- 虛函式在子類中可以不過載

- 純虛函式必須在子類中實現

- 虛函式的類用作」實現繼承「,即繼承介面的同時也繼承了父類的實現。

- 純虛函式用於」介面繼承「,即純虛函式關注的是介面的統一性,實現由子類完成

- 帶純虛函式的類叫做虛基類,這種類不能直接生成物件。

虛析構函式的作用

答:虛析構函式保證了在析構時,避免只呼叫基類析構函式而不呼叫派生類析構函式的情況,保證資源正常釋放,避免了記憶體釋放。只有當乙個類被用來作為基類的時候,才會把析構函式寫成虛函式(最好把基類的析構函式定義為虛函式;(如果沒有定義為虛函式,當基類指標指向派生類,並且刪除指標時,會析構基類而不會析構派生類,造成記憶體洩漏))

類成員函式中過載/重寫(覆蓋)/重定義(隱藏)的區別?

答:分別簡單講述一下函式過載,函式覆蓋,函式隱藏的概念與特徵:

函式過載:過載函式通常用來命名一組功能相似的函式

1.函式要在相同的類域

2.函式的名字要相同

3.函式的引數列表

函式覆蓋:覆蓋是指派生類函式覆蓋基類函式

1.函式是要在不同的類域

2.兩個函式的名稱相同

3.基類函式必須是虛函式

3.兩個函式的引數相同

函式隱藏:指派生類的函式遮蔽了與其同名的基類函式

1.兩個函式在不同的類域

2.函式名稱相同

3.函式引數不同

4.如果派生類函式與基類函式引數相同,但是在基類函式中沒有virtual關鍵字,發生函式隱藏

什麼多型?說說你對多型的理解or多型有什麼作用?

答:多型: 即乙個介面多種實現

理解的多型:多型是物件導向的三大特性之一。多型分為靜態多型及動態多型。

靜態多型包含函式過載與泛型程式設計,靜態多型是程式呼叫函式,編譯器決定使用哪個可執行**塊。

動態多型是由繼承機制及虛函式實現的。通過指向派生類的基類指標或引用,訪問派生類中同名覆蓋成員函式。

多型的作用:把不同的子類物件都當作父類來看,可以遮蔽不同子類物件之間的差異,寫出通用的**,做出通用的程式設計,以適應需求的不斷變化。

請實現乙個簡單的多型繼承關係?並講解一下c++的多型是怎麼實現的?

用c語言模擬實現c++多型呼叫

繼承的概念

答:繼承是物件導向的三大特性之一,繼承是指乙個物件直接使用另一物件的屬性和方法。

繼承可以使子類具有父類的各種屬性和方法。

繼承的主要目的是實現**的重用。

派生類與基類的轉換

答:派生類總是可以轉換為基類的引用型別。

基類轉換為派生類要在確認安全的條件下,使用強制轉換來進行。

私有繼承和組合有什麼相同點和不通點

答: 相同點:都表示「有乙個」的關係

不同點:私有繼承中派生類能訪問基類的protected成員,並且可以重寫基類的虛函式,組合不具有這些功能。

為什麼需要多重繼承,他的優缺點是什麼

答:為了解決實際生活中一些事物往往擁有兩個或兩個以上事物的屬性。

多重繼承的優點:物件可以呼叫多個基類的介面

多重繼承的缺點:容易出現繼承向上的二義性。即出現菱形繼承導致的二義性。

多重繼承中的二義性如何解決

答:兩個解決方案:

- 加上全域性符號確定呼叫哪乙份拷貝

- 使用虛擬繼承

單例模式

1.將構造,拷貝,賦值都放到private裡

2.1 static靜態區域性變數,存放在記憶體中的全域性資料區,只初始化一次

2.2 判斷是否為null,不為就new乙個

如何通過父類引用「呼叫」子類所獨有的方法

這也就是說多型的實現時,無法通過父類的指標去找到子類獨有的元素(如果是父類的引用也同理)。

解決方案是,在父類中宣告乙個虛函式用以向下型別轉換,在父類中給出其介面實現(否則會出現鏈結錯誤),在子類中自然給出其真正實現。

class derived;  

// 前置宣告

class base

virtual const derived& downcast() const

};class derived :public base

const derived& downcast() const

void foo(){}

};

總結 繼承,多型

一.不能被繼承的父類成員 1.private 2.子類與父類不在同包,使用預設訪問許可權的成員。3.構造方法。二.訪問許可權 從小到大 private 私有的 friendly 預設 protected 受保護的 public 公有的 三.方法重寫規則 1.方法名相同。2.引數列表相同。3.返回值型...

繼承與多型

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

繼承與多型

虛函式只要在基類裡定義,所以繼承類都不用重新定義為虛函式,自動成為虛函式。虛函式必須有實現,普通成員函式在沒有呼叫時可以沒有實現 定義 class animal 只需要在基類定義函式為虛,子類中不需要新增virtual.smile函式在沒有呼叫時可以不實現。當有函式為虛函式時,析構函式應定義為vir...