什麼是多型?
多型按照字面的意思就是「多種狀態 」的意思。在c++中多型有著更廣泛的含義。下面著重介紹c++語言中關於多型的一些知識點。
c++中多型分為靜態多型和動態多型。靜態多型通過函式過載和泛型程式設計實現。動態多型通過虛函式來實現。參照下圖:
靜態多型:
編譯器在編譯期間完成的,編譯器根據函式實參的型別(可能會進行隱式型別轉換),可推斷出要呼叫那個函式,如果有對應的函式就呼叫該函式,否則出現編譯錯誤。
int add(int a1, int a2)
double add(double d1, double d2)
int main()
以上例子是通過函式過載實現靜態多型的。
4. 動態多型:
動態繫結:在程式執行期間(非編譯期)判斷所引用物件的實際型別,根據其實際型別呼叫相應的方 法。
使用virtual關鍵字修飾函式時,指明該函式為虛函式,派生類需要重新實現,編譯器將實現動態繫結。
class base
virtual void funtest2()//虛函式 };
class derived:public base
void funtest3()
void funtest4() };
int main()
以上**執行結果如下:
由執行結果可知:
(1).如果在派生類中對基類函式進行了重寫,則在派生類中就呼叫派生類的成員函式。否則將呼叫基類的成員函式。
(2).動態繫結條件:
a.必須是虛函式
b.通過基類型別的引用或者指標呼叫
5.純虛函式
在成員函式的形參後面寫上=0,則成員函式為純虛函式。包含純虛函式的類叫做抽象類(也叫介面類),抽象類不能例項化出物件。純虛函式在派生類中重新定義以後,派生類才能例項化出物件。
純虛函式舉例:
class a
;
6.總結:
(1).派生類重寫基類的虛函式實現多型,要求函式名、引數列表、返回值完全相同。
(2).基類中定義了虛函式,在派生類中該函式始終保持虛函式的特性。
(3).只有類的成員函式才能定義為虛函式,靜態成員函式不能定義為虛函式。
(4).如果在類外定義虛函式,只能在宣告函式時加virtual關鍵字,定義時不用加。
(5).建構函式不能定義為虛函式
(6).不要在建構函式和析構函式中呼叫虛函式,在建構函式和析構函式中,物件是不完整的,可能會出現未定義的行為。
(7).
虛表是所有類物件例項共用的。
本文出自 「10912110」 部落格,請務必保留此出處
c 多型小結
多型 指相同物件接收到不同訊息或者不同的物件接收到相同的訊息時產生的不同的動作。前者,相同的物件接收不同的訊息可以看做函式的多型,也就是函式的過載,這種多型是靜態的多型,表面上看函式的名稱一樣,或者由於引數的型別或者個數或者返回值形成的不同的函式過載,在編譯器編譯的時候,儘管函式名稱相同,但是在編譯...
繼承與多型小結
1.基類派生出派生類 派生類要繼承基類 作用域也會被繼承 2.基類的布局優先於派生類的布局 3.物件的生成 4.物件的銷毀 1 普通的成員變數 2 靜態的成員變數 3 普通的成員方法 4 靜態的成員方法 5 作用域 派生類繼承了基類除構造以外的所有成員8.派生類的構造析構順序 基類構造優先於派生類構...
java的繼承和多型小結
1 為什麼要繼承?如何繼承?繼承到了什麼?比如我們定義了乙個學生類,所有的學生都擁有一些特定的屬性和方法。但如果這個系統應用於大學生的話,又會有許多的大學生類中特有的屬性和方法。這時就不必在重新定義乙個大學生類了,我們可以讓他繼承學生類。首先我們先定義乙個學生類 package cjl.extend...