當前位置:首頁 » 編程軟體 » 編譯時多態是通過什麼實現的

編譯時多態是通過什麼實現的

發布時間: 2022-08-27 16:43:16

⑴ C++編程中多態性的實現機制到底是什麼呀

樓上的說不對
在C++中,多態性分為兩種,一種稱為編譯時多態,另一種為運行時多態
分別解釋下:
1.編譯時多態,也就是函數重載,所謂函數重載是指同一個函數名可以對應著多個函數的實現,具體調用哪個按照由參數個數,參數類型等來決定,這個簡單,就不說了
2.運行時多態,就是虛函數。
在定義了虛函數後,可以在基類的派生類中對虛函數重新定義,以實現你所想要的功能。

⑵ 多態的原理是什麼

在編程語言和類型論中,多態(英語:polymorphism)指為不同數據類型的實體提供統一的介面。 多態類型(英語:polymorphic type)可以將自身所支持的操作套用到其它類型的值上。

計算機程序運行時,相同的消息可能會送給多個不同的類別之對象,而系統可依據對象所屬類別,引發對應類別的方法,而有不同的行為。簡單來說,所謂多態意指相同的消息給予不同的對象會引發不同的動作。

多態也可定義為「一種將不同的特殊行為和單個泛化記號相關聯的能力」。

(2)編譯時多態是通過什麼實現的擴展閱讀:

多態可分為變數多態與函數多態。變數多態是指:基類型的變數(對於C++是引用或指針)可以被賦值基類型對象,也可以被賦值派生類型的對象。函數多態是指,相同的函數調用界面(函數名與實參表),傳送給一個對象變數,可以有不同的行為,這視該對象變數所指向的對象類型而定。因此,變數多態是函數多態的基礎。

多態還可分為:動態多態(dynamic polymorphism)和靜態多態(static polymorphism)。

對於C++語言,帶變數的宏和函數重載(function overload)機制也允許將不同的特殊行為和單個泛化記號相關聯。然而,習慣上並不將這種函數多態(function polymorphism)、宏多態(macro polymorphism)展現出來的行為稱為多態(或靜態多態),否則就連C語言也具有宏多態了。談及多態時,默認就是指動態多態,而靜態多態則是指基於模板的多態。

⑶ c++多態實現原理

1.在編譯期間實現多態多態是指在不同的條件下表現出不同的狀態,C++中通過重載函數的方法可以在編譯期間實現多態。在編譯時編譯器會根據參數列表的不同尋找合適的函數。
2.使用虛函數實現多態C++中運行時多態可以通過聲明一個虛函數來實現。虛函數分為純虛方法和半虛方法,純函數父類沒有實現版本,完全交給子類,且必須實現。半虛函數父類可以實現...
3.虛函數的實現原理一個類中如果有虛函數聲明,那麼這些函數會由一個虛函數表來維護 1)...

java語言是如何實現多態的

你好,很高興回答你的問題。
java的多態是通過繼承、重寫、重載來實現的。

同一個父類的多個子類,通過各自重寫繼承自父類的方法,實現子類實現父類方法的多態。

而一個類中,相同的方法名可以通過不同的參數列表重載來顯示一個類中相同方法名的多態。

如果有幫助到你,請點擊採納。

我解答的大部分是軟體開發新人遇到的問題,如果有興趣可以關注我。

⑸ 面向對象的多態詳解 !!

面向對象的軟體開發語言具有三個重要的特點分別為封裝性、繼承性、多態性。封裝性即意味著對象封裝其內部的數據,使其對外不可見,以保證數據的安全性。繼承性是代碼復用的一個很好的解決方案,但是繼承關系是編譯器在編譯階段就為所有的對象決定的,因而在軟體工程過程中,繼承性太過死板,存在很大的局限性。而多態性,它是將多種不同的特殊行為進行抽象的一種能力,通過結合繼承性,多態性很好地解決了OO遇到的很多麻煩,使得面向對象的編程方式最終得到淋漓盡致的推廣。

多態性和泛型編程

各種編程語言都內置了多種基本數據結構並且支持自定義數據類型,因而程序員在程序設計過程中可能會遇到多種數據類型,而針對這些數據類型的邏輯操作很有可能是雷同的。此時為每一種數據類型都設計出相應的邏輯函數似乎已經變得很不現實,因而泛型編程孕育而生了。泛型編程的出現,可以說在軟體工程領域里是一個極大的進步。利用泛型編程,我們可以不為特定的類型進行專門編碼,而採用對不同類型進行通用編碼的方式來解決應對大量數據類型的問題。C++
STL是泛型編程的成功案例。利用Template函數,STL成功實現了對多種數據類型進行泛化的效果。而OO通過介面或者抽象類進一步實現了對類的泛化,也就是在面向對象過程中出現的新名詞—多態!

多態性特點

簡單來說,多態是具有表現多種形態的能力的特徵,在OO中是指,語言具有根據對象的類型以不同方式處理,即指同樣的消息被不同類型的對象接收時導致完全不同的行為,是對類的特定成員函數的再抽象。多態性在不同的編程語言中擁有不同的解決方案,但多態性的最終目標卻始終不變,都是「以不變應萬變」。

兩種多態方式

一般來說,多態主要是存在兩種類型:編譯時的多態和運行時的多態。

1
編譯時的多態主要是通過函數重載來實現的。所謂函數重載是指保持函數名不變,主要通過更改函數形參的個數以及形參的類型來定義出多個同名函數來實現對多種類型數據的邏輯處理。這種類型的多態關系是編譯器在編譯階段就已經在函數調用的地方確定的,因而運行過程中速度較快,但功能比較局限。

2
運行時的多態在不同的語言中擁有不同的實現方案。C++通過虛函數的晚捆綁來實現,而Java通過面向介面編程和面向抽象編程來實現動態調用相應的函數實現。但歸根結點,這些語言都是通過將多種特殊實現的類抽象為一個泛化類來實現運行多態。

面向介面編程

軟體工程中程序涉及到的對象越多,對象之間相似的概率越大,因而這時候抽象變成了可能。通過定義介面,程序設計者可以成功實現對方法的定義和實現的分離,因而應用程序不必考慮子類成員函數中是如何實現內部邏輯細節,只需知道該類對象向外公開的介面便可成功操縱這類對象。而這種編程方式,為以後程序的改動以及程序的健壯性和擴展性都提供了一個比較理想的解決方案。因此面向抽象編程已經成為OO界強烈推崇的編程方式。

OO思想已經深入廣大編程人員的工作中,如何能夠充分合理利用OO的特點達到最優化軟體體系結構將會成為每一個OO程序員應該思考的問題,相信OO思想能夠為大家的軟體設計帶來前所未有的效果。

⑹ 什麼是多態

多態首先是建立在繼承的基礎上的,先有繼承才能有多態。多態是指不同的子類在繼承父類後分別都重寫覆蓋了父類的方法,即父類同一個方法,在繼承的子類中表現出不同的形式。多態成立的另一個條件是在創建子類時候必須使用父類new子類的方式。

多態(Polymorphism)按字面的意思就是「多種狀態」。在面向對象語言中,介面的多種不同的實現方式即為多態。引用Charlie Calverts對多態的描述——多態性是允許你將父對象設置成為一個或更多的他的子對象相等的技術,賦值之後,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作(摘自「Delphi4編程技術內幕」)。

簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針。多態性在Object Pascal和C++中都是通過虛函數實現的。

拓展資料:

多態指同一個實體同時具有多種形式。它是面向對象程序設計(OOP)的一個重要特徵。如果一個語言只支持類而不支持多態,只能說明它是基於對象的,而不是面向對象的。C++中的多態性具體體現在運行和編譯兩個方面。運行時多態是動態多態,其具體引用的對象在運行時才能確定。編譯時多態是靜態多態,在編譯時就可以確定對象使用的形式。

多態:同一操作作用於不同的對象,可以有不同的解釋,產生不同的執行結果。在運行時,可以通過指向基類的指針,來調用實現派生類中的方法。

C++中,實現多態有以下方法:虛函數,抽象類,覆蓋,模板(重載和多態無關)。

OC中的多態:不同對象對同一消息的不同響應.子類可以重寫父類的方法。

多態就是允許方法重名 參數或返回值可以是父類型傳入或返回。

多態也指生物學中腔腸動物的特殊的生活方式。水螅態與水母態的世代交替現象。

把不同的子類對象都當作父類來看,可以屏蔽不同子類對象之間的差異,寫出通用的代碼,做出通用的編程,以適應需求的不斷變化。

賦值之後,父類型的引用就可以根據當前賦值給它的子對象的特性以不同的方式運作。也就是說,父親的行為像兒子,而不是兒子的行為像父親。

使用繼承性的結果就是當創建了一個類的家族,在認識這個類的家族時,就是把子類的對象當作基類的對象,這種認識又叫作upcasting(向上轉型)。這樣認識的重要性在於:我們可以只針對基類寫出一段程序,但它可以適應於這個類的家族,因為編譯器會自動找出合適的對象來執行操作。這種現象又稱為多態性。而實現多態性的手段又叫稱動態綁定(dynamic binding)。

簡單的說,建立一個父類對象的引用,它所指對象可以是這個父類的對象,也可以是它的子類的對象。java中當子類擁有和父類同樣的函數,當通過這個父類對象的引用調用這個函數的時候,調用到的是子類中的函數。

⑺ 編譯時多態性使用什麼獲得!A重載函數B繼承C虛函數D.B和C

函數重載和模板。就這題來說選A。
繼承和虛函數對應的多態需要在運行的時候才能確定具體對象,所以不屬於編譯時多態。

函數重載是讓一個函數名對應多個函數,編譯器會根據調用時候的特徵確定要調用的函數,不需要再運行時處理。
而模板是讓一個一個類型模板或者函數模板對應多個類型或者函數,編譯器根據對模板實例化是使用的參數生成具體的類和函數,也不是在運行時進行的。
另外注意模板變數不屬於多態范疇。

熱點內容
電腦一般怎麼連接伺服器 發布:2025-02-07 17:12:55 瀏覽:488
ftp用ie打開文件 發布:2025-02-07 17:07:42 瀏覽:267
android列表顯示 發布:2025-02-07 17:01:19 瀏覽:63
芒果tv緩存的視頻在哪個文件里 發布:2025-02-07 16:45:05 瀏覽:814
php郵件群發 發布:2025-02-07 16:45:05 瀏覽:613
mysql資料庫基本語句 發布:2025-02-07 16:41:48 瀏覽:250
醫院門禁密碼多少 發布:2025-02-07 16:41:43 瀏覽:527
伺服器遭美國ip攻擊簽名 發布:2025-02-07 16:22:48 瀏覽:546
如何配置二良腌料 發布:2025-02-07 16:11:54 瀏覽:735
資料庫課程設計學生管理系統 發布:2025-02-07 16:11:50 瀏覽:764