polymorphism-多態(函數多態、宏多態、靜態多態、動態多態)

來源:互聯網
上載者:User

標籤:polymorphism-多態(函數多態、宏多態、靜態多態、動態多態)

多態(polymorphism)

字面上意思--多種形態,即同一種方法的行為隨上下文而異。

維基百科:Polymorphism (computer science), the ability incomputer programming to present the same interface for differing underlyingforms (data types).

 

1、函數多態(function polymorphism):也即是函數重載(functionoverloading)


650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/48/4B/wKiom1QGxxDjcyKYAAHP7VCAaPA651.jpg" title="函數多態樣本.jpg" alt="wKiom1QGxxDjcyKYAAHP7VCAaPA651.jpg" />

編譯器根據參數列表的不同分別編譯,產生不同的函數。即對於同一個函數名,編譯器根據不同的參數列表可以產生不同的函數。


2、宏多態(macro polymorphism):

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/48/4C/wKioL1QGxx_CU1huAAHPIstpucg661.jpg" title="宏多態樣本.jpg" alt="wKioL1QGxx_CU1huAAHPIstpucg661.jpg" />

編譯時間,運算式ADD(i1,i2)和ADD(s1,s2)替換成具體運算式。宏多態其實是實現簡單的靜態多態程式編譯時間,宏會被替換成具體的運算式,根據形參來標示具體操作


3、靜態多態

靜態多態本質上就是模板的具現化。編譯器處理後,會得到run_vehicle()兩個不同的函數。

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/48/4C/wKioL1QGxy-QCU01AAJN7d1gH3c515.jpg" title="靜態多態樣本.jpg" alt="wKioL1QGxy-QCU01AAJN7d1gH3c515.jpg" />

設計思想 對於相關的物件類型,直接實現它們各自的定義,不需要基類。只是規定各個具體類的實現中相同功能的介面名要相同。靜態多態本質上就是模板的具現化,主要通過模板來實現又稱編譯時間多態


4、動態多態:基於繼承機制和虛函數

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/48/4C/wKioL1QGx0bBtzfzAAKGD6anzCQ445.jpg" title="動態多態樣本.jpg" alt="wKioL1QGx0bBtzfzAAKGD6anzCQ445.jpg" />

設計思想:對於相關的物件類型,確定它們之間的一個共同功能集,然後在基類中,把這些共同的功能聲明為多個公用的虛函數介面。各個子類重寫這些虛函數,以完成具體的功能。動態多態基於繼承機制和虛函數又稱運行時多態


虛函數實現原理框圖:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/48/4B/wKioL1QGw_uBkahWAAEuljQsC3o414.jpg" title="虛函數實現原理.jpg" alt="wKioL1QGw_uBkahWAAEuljQsC3o414.jpg" />

重點:虛函數

靜態聯編(staticbinding):在編譯過程中進行聯編;

動態聯編(dynamic binding):有虛函數,編譯器產生能夠在程式運行時選擇正確的虛方法的代碼。

 

靜態和動態比較:

不同點

1、本質不同,靜態多態在編譯期決定,由模板具現完成,而動態多態在運行期決定,由繼承、虛函數實現;

2、動態多態中介面是顯式的,以函數簽名為中心,多態通過虛函數在運行期實現,靜態多台中介面是隱式的,以有效運算式為中心,靜態多態通過模板具現在編譯期完成。

相同點

1、都能夠實現多態性,靜態多態--編譯期多態、動態多態--運行期多態;

2、都能夠使介面和實現相分離,一個是模板定義介面,型別參數定義實現,一個是基類虛函數定義介面,繼承類負責實現。

 

 

 


polymorphism-多態(函數多態、宏多態、靜態多態、動態多態)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.