C 多型性的理解

2021-07-30 14:41:59 字數 1723 閱讀 4289

根據清華大學鄭莉老師的書《c++語言程式設計》來總結

1 多型:是指類中具有相似功能的不同函式,使用同乙個名稱來實現;是對類的行為再抽象;多型是通過過載函式和虛函式來實現的。

2 繼承討論的是類與類的層次關係,多型則是考慮在不同層次的類中,以及在同乙個類的內部,同名成員函式之間的關係問題,是解決功能和行為的再抽象問題。

3 多型是指類族中具有相似功能的不同函式使用同乙個名稱來實現,從而可以使用相同的呼叫方式來呼叫這些具有不同功能的同名函式。

型別:

物件導向的多型性可以分為4類:

專用多型:

(1)過載多型:普通函式以及成員函式的過載。

(2)強制多型:將乙個變數的型別加以變化。

通用多型:

(3)包含多型:研究類族中定義於不同類中的同名成員函式的多型行為,主要通過虛函式來實現。

(4)引數多型:與類模板相關聯。

實現:

多型從實現的角度可以分為:

(1)編譯時的多型:靜態聯編(過載、強制、引數),程式編譯連線階段完成。

(2)執行時的多型:動態聯編(包含),程式執行階段完成。

聯編:是指電腦程式自身彼此關聯的過程,就是把一條訊息和乙個物件的方法相結合的過程。

運算子過載:

運算子過載的實質是函式過載,在實現過程中,首先把指定的運算表示式轉化為對運算子函式的呼叫,運算物件轉化為運算子函式的形參,然後根據實參的型別來確定需要呼叫的函式,這個過程是在編譯過程中實現的。不能過載的運算子有5個:「.」,「*」,「::」,「? :」「sizeof」。

虛函式:

虛函式是動態聯編的基礎,虛函式是非靜態成員函式,虛函式經過派生之後,在類族中可以實現執行過程中的多型。

根據賦值相容規則,可以使用派生類物件代替基類物件。如果用基類型別的指標指向派生類物件,就可以通過這個指標來訪問該物件。問題是派生到的只是從基類繼承來的同名成員。

解決這一問題的辦法就是:如果需要通過基類的指標指向派生類的物件,並訪問某個與基類同名的成員(如果是函式,則原型完全相同)。那麼,首先在基類中將這個同名函式說明為虛函式。

這樣,通過基類型別指標,就可以使屬於不同派生類的不同物件產生不同的行為,從而實現執行過程中的多型。

一般虛成員函式實現的3個條件:

(1)首先類之間應滿足賦值相容規則。

(2)宣告虛函式。

(3)由成員函式呼叫,或者通過指標、引用來訪問虛函式。

如果使用物件名來訪問虛函式,則聯編在編譯過程中就可以通過(靜態聯編),而無需在執行中進行。

虛析構函式:

如果乙個類的析構函式時虛函式,那麼,用它派生而來的所用子類的析構函式也是虛函式。析構函式設定為虛函式之後,在使用指標,引用時就可以動態聯編,實現執行時的多型,保證使用基類型別的指標就能夠呼叫適當的析構函式針對不同的物件進行清理工作。

抽象類:

(1)抽象類是一種特殊的類,它為一族類提供統一的操作介面,通過它為乙個類族建立乙個公共的介面,使類能夠更加有效的發揮多型性。

(2)建立抽象類,就是為了通過它多型地使用其中的成員函式。

(3)抽象類處於其層次的上層,乙個抽象類自身無法實現化,而只能通過繼承機制。生成抽象類的非抽象派生類,然後例項化。但是,可以宣告乙個抽象類的指標和引用。

(4)抽象類是帶有純虛函式的類。

(5)抽象類派生出新類之後,如果派生類沒有給出全部純虛函式的實現,這時的派生類仍是乙個抽象類。

(6)純虛函式:virtual 函式型別 函式名(參數列)=0;

C 動態多型性的理解

c 動態多型性是通過抽象類和虛方法實現的。抽象類的理解 用關鍵字abstract建立抽象類,用於提供介面的部分類的實現 理解 介面不能提供實現,抽象類中可以有實現,介面與抽象類一起使用,可以達到父類中不能實現的子類就必須實現,父類中有實現的子類就不需要實現的目的 抽象類包含抽象方法,抽象方法必須在派...

C 多型性的理解和舉例

多型性是物件導向程式的乙個重要特徵,下面通過程式來理解程式的多型性 多型性 includeusing namespace std class point float gety const friend ostream operator ostream const point protected fl...

深入理解C 的多型性

c 程式語言是一款程式設計客棧應用廣泛,支援多種程式設計的計算機程式語言。我們今天就會為大家詳細介紹其中c 多型性的一些基本知識,以方便大家在學習過程中對此能夠有乙個充分的掌握。多型性可以簡單地概括為 乙個介面,多種方法 程式在執行時才決定呼叫的函式,它是物件導向程式設計領域的核心概念。多型 pol...