多型繫結分兩種情況,一種是靜態繫結即編譯時多型,一種是動態繫結即執行時多型
是利用過載實現的。對於非虛函式的成員來說,系統在編譯時,按照函式的引數的區別來繫結要實現的操作,在編譯時就確定了呼叫哪個函式。
簡單地說,虛函式是動態繫結的基礎;動態繫結是實現執行時多型的基礎。 要觸發動態繫結,需滿足兩個條件: (1) 只有虛函式才能進行動態繫結,非虛函式不進行動態繫結。(2) 必須通過基類型別的引用或指標進行函式呼叫。 通過基類指標或基類引用做形參,當實參傳入不同的派生類(或基類)的指標或引用,在函式內部觸發動態繫結,從而來執行時實現多型的。
因為普通函式是靜態聯編的,而呼叫虛函式是動態聯編的。
明顯動態聯編要比靜態聯編做的操作多,肯定就費時間。參見此部落格:
在用基類操作派生類時,為了防止執行基類的析構函式,不執行派生類的析構函式。因為這樣的刪除只能夠刪除基類物件, 而不能刪除子類物件, 形成了刪除一半角象, 會造成記憶體洩漏.為什麼要把基類的析構函式定義為虛函式就可以呼叫子類析構函式呢?看下面**
#includeusing namespace std;
class base
; ~base()
;};class derived : public base
; ~derived()
;};int main()
為什麼子類和父類的函式名不一樣,還可以構成重寫呢?
因為編譯器對析構函式的名字做了特殊處理,在內部函式名是一樣的。
抽象類是利用虛函式的延伸
virtual
void
display
()= 0;//存虛函式
含有存虛函式的類為抽象類,也叫介面類,不能例項出物件
抽象類就是用來繼承的,如多個子類繼承同乙個抽象類,就都可以重寫這個共同父類的存虛函式,這樣的話我們用父類的指標來接收子類,我們把哪個子類傳給父類,就呼叫的是那個子類裡的方法,是不是很方便,抽象類也是一種規範化的程式設計。
(1)靜態方法只能訪問類的靜態成員,不能訪問類的非靜態成員;(2)非靜態方法可以訪問類的靜態成員,也可以訪問類的非靜態成員;
(3)靜態方法既可以用例項來呼叫,也可以用類名來呼叫。
c 多型總結
多型 多型可以簡單地概括為 乙個介面,多種方法 程式在執行時才決定呼叫的函式,它是物件導向程式設計領域的核心概念。接下來,我寫乙個簡單地函式來說明多型 includeusing namespace std int add int left,int right float add float left...
C 多型總結
多型概念 同乙個事物在不同環境下具有不同的狀態 虛函式概念 在函式返回值前加上 virtual 關鍵字 多型分類 靜態多型 早繫結 在編譯器編輯時確認要呼叫的函式 1 函式過載 2 泛型程式設計 動態多型 晚繫結 在程式執行時確認將要呼叫的函式 1 基類中存在虛函式 2 繼承當中對基類進行重寫並且 ...
c 多型總結
1 c 中通過virtual關鍵字對多型進行支援,使用virtual宣告的函式被重寫後即可展現多型特性。注意和虛繼承的區別。雖然用的是同乙個關鍵字,但意義完全不同。2 多型的意義 多型可以使用未來,80年 了乙個框架,可以呼叫90年 的 多型是設計模式的基礎,多型是框架的基礎。3 多型成立的條件 3...