什麼是類的多型性

2021-05-27 09:53:15 字數 1856 閱讀 3071

理解c#多型性之前首先理解一下什麼叫多型。同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果,這就是多型性。c#多型性通過派生類覆寫基類中的虛函式型方法來實現。

c#多型性分為兩種,一種是編譯時的多型性,一種是執行時的多型性。

◆編譯時的多型性:編譯時的多型性是通過過載來實現的。對於非虛的成員來說,系統在編譯時,根據傳遞的引數、返回的型別等資訊決定實現何種操作。

◆執行時的多型性:執行時的多型性就是指直到系統執行時,才根據實際情況決定實現何種操作。c#中執行時的多型性是通過覆寫虛成員實現。

c++**:

這就是眾所周知的的多型。現代物件導向語言對這個概念的定義是一致的。其技術基礎在於繼承機制和虛函式。例如,我們可以定義乙個抽象基類vehicle和兩個派生於vehicle的具體類car和airplane: 

// dynamic_poly.h 

#include 

// 公共抽象基類vehicle 

class vehicle 

; // 派生於vehicle的具體類car 

class car: public vehicle 

}; // 派生於vehicle的具體類airplane 

class airplane: public vehicle 

}; 客戶程式可以通過指向基類vehicle的指標(或引用)來操縱具體物件。通過指向基類物件的指標(或引用)來呼叫乙個虛函式,會導致對被指向的具體物件之相應成員的呼叫: 

// dynamic_poly_1.cpp 

#include 

#include 

#include "dynamic_poly.h" 

// 通過指標run任何vehicle 

void run_vehicle(const vehicle* vehicle) 

int main() 

此例中,關鍵的多型介面元素為虛函式run()。由於run_vehicle()的引數為指向基類vehicle的指標,因而無法在編譯期決定使用哪乙個版本的run()。在執行期,為了分派函式呼叫,虛函式被呼叫的那個物件的完整動態型別將被訪問。這樣一來,對乙個car物件呼叫run_vehicle(),實際上將呼叫car::run(),而對於airplane物件而言將呼叫airplane::run()。 

或許動態多型最吸引人之處在於處理異質物件集合的能力: 

// dynamic_poly_2.cpp 

#include 

#include 

#include "dynamic_poly.h" 

// run異質vehicles集合 

void run_vehicles(const std::vector< vehicle* >& vehicles)  } 

int main() 

在run_vehicles()中,vehicles[i]->run()依據正被迭代的元素的型別而呼叫不同的成員函式。這從乙個側面體現了物件導向程式設計風格的優雅。 

c#**

using system;

using system.collections.generic;

using system.componentmodel;

using system.data;

using system.drawing;

using system.linq;

using system.text;

using system.windows.forms;

}public partial class form1 : form

private void form1_load(object sender, eventargs e)}}

什麼是多型性?

多型性分 過載 overload,過載只是函式名相同,返回型別,引數不同,早期匹配 虛函式 函式必須有完全相同的返回型別和參數列,晚期匹配 虛函式 一般虛函式 基類有函式體有實現,子類可重寫也可不重寫 純虛函式 基類只有函式體沒有實現 virtual fun 0,子類必須實現此函式體,至少含有乙個純...

C 多型性 什麼是多型

下面舉乙個生活的例子來理解多型。如果要求3種人 孩子,運動員,演奏者都執行乙個動作 play 會發生什麼情況呢?孩子會出去玩耍。運動員會比賽。演員開始演奏。對於同乙個命令,不同的人會有不同的反應,執行不同的動作,這就是生活中乙個多型。在程式設計中,對於同乙個方法,由於執行的物件不同,方法的內容也就不...

C 多型性 什麼是多型

下面舉乙個生活的例子來理解多型。如果要求3種人 孩子,運動員,演奏者都執行乙個動作 play 會發生什麼情況呢?孩子會出去玩耍。運動員會比賽。演員開始演奏。對於同乙個命令,不同的人會有不同的反應,執行不同的動作,這就是生活中乙個多型。在程式設計中,對於同乙個方法,由於執行的物件不同,方法的內容也就不...