導航:首頁 > 源碼編譯 > 編譯時的多態性被稱為

編譯時的多態性被稱為

發布時間:2022-06-10 06:16:30

Ⅰ 多態性誰來幫我解釋一下!

多態性

1.多態性的概念

多態性是指用一個名字定義不同的函數,這函數執行不同但又類似的操作,從而實現「一個介面,多種方法」。

多態性的實現與靜態聯編、動態聯編有關。靜態聯編支持的多態性稱為編譯時的多態性,也稱靜態多態性,它是通過函數重載和運算符重載實現的。動態聯編支持的多態性稱為運行時的多態性,也稱動態多態性,它是通過繼承和虛函數實現的。

2.函數重載

函數重載的意義在於他能用同一個名字訪問一組相關的函數。

在類中普通成員函數和構造函數都可以重載,特別是構造函數的重載(他提供了多種初使化方式)給用戶更大的靈活性。在基類和派生類的函數重載有兩種情況:一種是參數有所差別的重載。另一種是參數沒有差別的重載,只是他們屬於不同的類。

可以用以下兩種方法來區分這兩種函數:用對象名加以區分;使用「類名::」加以區分。

3.運算符重載稱動態多態性,他是通過繼承和虛函數實現的。

運算符重載通過創建運算符函數operator@()來實現。運算符函數定義了重載的運算符將要進行的操作,這種操作通常作用在一個類上。這樣,在編譯時遇到名為operator@的運算符函數(@表示所要重載的運算符),就檢查傳遞給函數的參數的類型。

重載運算符與預定義運算符的使用方法完全相同,它不能改變原有運算符的參數個數(單目或雙目),也不能改變原有的優先順序的結合性。用戶不能定義新的運算符,只能從C++已有的運算符中選擇一個恰當的運算符重載。

3.1成員運算符函數

運算符函數可以定義為它將要操作的類的成員(稱為成員運算符函數),也可以定義為非類的成員,但是非成員的運算符函數大多是類的友元函數(稱為友元運算符函數)。

成員運算符函數在類中的聲明格式為:

class X{
//……
type operator@(參數表);
};

其中type為函數的返回類型,@為所要重載的運算符符號,X是重載此運算符的類名,參數表中羅列的是該運算符所需要的操作數。

成員運算符函數定義的形式一般為:

type X::operator@(參數表)

//函數體}

其符號的含義與聲明時相同。

在成員運算符函數的參數表中,若運算符是單目的,則參數表為空,此時當前對象作為運算符的一個操作數,通過this指針隱含地傳遞給函數的;若運算符是雙目的,則參數表中有一個操作數,它作為運算符的右操作參數,此時當前對象做為運算符的左操作數,它是this指針隱含地傳遞給函數的。總之成員運算符函數operator@所需要的一個操作數是由對象通過this指針隱含傳遞。

3.2友元運算符函數

在C++中可以把運算符函數定義成某個類的友元函數,稱為友元運算符函數。

友元運算符函數在類的內部聲明格式如下:

friend type operator@(參數表)
定義友元運算符函數格式如下:
type operator@(參數表)
{ //函數體
}

與成員運算符函數不同,友元運算符函數是不屬於任何類對象的,它沒有this指針。若重載的是雙目運算符,則參數表中有兩個操作數;若重載的是單目運算符,則參數表中只有一個操作數。 不能用友元函數重載的運算符是=、()、[]、-〉,其餘的運算符都可以使用友元函數來實現重載。

運算符函數調用形式如下表:

運算符函數調用形式

習慣形式 友元運算符函數調用形式 成員運算符函數調用形式

a+b operator(a,b) a.operator+(b)
-a operator-(a) a.operator-()
a++ operator++(a,0) a.operator++(0)

4.賦值運算符

繼承C語言,用戶自定義的類和結構都要能進行賦值運算。而數組名不能賦值,數組名實質上是一個常量指針。

對於任何類,C++提供了默認的賦值運算符。一般地,默認的賦值運算符重載是能夠勝任工作的。當類中有指針類型時,需要自定義賦值運算符函數。一般其函數體包含兩部分:

1)與析構函數類似,取消對象已經佔有的資源;

2)與構造函數類似,在其中分配新的資源。

類的賦值運算符重載「=」只能重載為成員函數,不能重載為友元函數。

重載後的運算符函數operator=()不能被繼承。

拷貝構造函數和賦值運算符重載的區別:聲明和定義方式不同;調用方式不同。

5.虛函數

虛函數是重載的另一種表現形式,允許虛函數調用與函數體之間的聯系在運行時才建立。
定義:虛函數就是在基類中被關鍵字virtual說明,並在派生類中重新定義的函數,在派生類中重新定義時,其函數原形包括返回類型,函數名,參數個數與參數類型的順序,都必須與基類中的原形必須相同。
構造函數不能是虛函數,但析構函數可以是虛函數。

虛函數與重載函數的關系:當普通的函數重載時,其函數的參數或參數類型必須有所不同,函數的返回類型也可不同;在派生類中,重新定義虛函數時要求函數名、返回類型、參數個數、參數的類型和順序與基類中的函數原形完全相同;若僅僅返回類型不同,其餘均相同,系統會給出錯誤信息。虛函數重載時若僅僅函數名相同,而參數的個數、類型或順序不同系統將它作為普遍函數重載,虛函數的特徵將會丟失。
多重繼承與虛函數:多重繼承可視為多個單繼承的組合。

6.純虛函數和抽象類

純虛函數:是一個在基類中說明的虛函數,他在該基類中沒有定義,但要求在它的派生類中定義自己的版本,或重新說明為純虛函數。

純虛函數的一般形式:virtual type func_name(參數表)=0(type是函數的返回類型,func_name是函數名)。

抽象類:一個類至少有一個純虛函數的類。抽象類提供了處理各種不同派生類的統一介面,將實現的責任交給了派生類。

Ⅱ C++支持的兩種多態性分別是什麼

靜態聯編支持的多態性稱為編譯時的多態性,也稱靜態多態性,它是通過函數重載和運算符重載實現的。
動態聯編支持的多態性稱為運行時的多態性,也稱動態多態性,它是通過繼承和虛函數實現的。

java中多態性什麼意思

多態性:顧名思義就是擁有「多種形態」的含義,是指屬性或方法在子類中表現為多種形態。

在JAVA中有兩種多態是指:運行時多態和編譯時多態。多態性是面向對象的核心特徵之一,類的多態性提供類中成員設計的靈活性和方法執行的多樣性。

多態指允許不同類的對象對同一消息做出響應。即同一消息可以根據發送對象的不同而採用多種不同的行為方式。(發送消息就是函數調用)

實現多態的技術稱為:動態綁定(dynamic binding),是指在執行期間判斷所引用對象的實際類型,根據其實際的類型調用其相應的方法。

展資料:

多態的好處:

1、可替換性(substitutability)多態對已存在代碼具有可替換性。例如,多態對圓Circle類工作,對其他任何圓形幾何體,如圓環,也同樣工作。

2、可擴充性(extensibility)多態對代碼具有可擴充性。增加新的子類不影響已存在類的多態性、繼承性,以及其他特性的運行和操作。實際上新加子類更容易獲得多態功能。

3、介面性(interface-ability)多態是超類通過方法簽名,向子類提供了一個共同介面,由子類來完善或者覆蓋它而實現的。

4、靈活性(flexibility)它在應用中體現了靈活多樣的操作,提高了使用效率。

5、簡化性(simplicity)多態簡化對應用軟體的代碼編寫和修改過程,尤其在處理大量對象的運算和操作時,這個特點尤為突出和重要。

Ⅳ java問答題什麼是多態性

多態性

多態性的概念

多態性是指用一個名字定義不同的函數,這函數執行不同但又類似的操作,從而實現「一個介面,多種方法」。

多態性的實現與靜態聯編、動態聯編有關。靜態聯編支持的多態性稱為編譯時的多態性,也稱靜態多態性,它是通過函數重載和運算符重載實現的。動態聯編支持的多態性稱為運行時的多態性,也稱動態多態性,它是通過繼承和虛函數實現的。

Ⅳ 1. 編譯時的多態性與運行時的多態性有什麼區別,他們的實現方法有什麼不同

多態從實現的角度可以劃為兩類:編譯時多態和運行時多態。

編譯時的多態性:就是在程序編譯的時候,也就是生成解決方案的時候就決定要實現什麼操作。

運行時的多態性:就是指直到系統運行時,才根據實際情況決定實現何種操作。

1、多態實現形式不同:

編譯時的多態是通過靜態連編來實現的;運行時的多態是用動態連編來實現的。

2、多態性通過方式不同:

編譯時的多態性主要是通過函數重載和運算符重載來實現的;運行時的多態性主要是通過虛函數來實現的。

(5)編譯時的多態性被稱為擴展閱讀:

靜態多態性又稱編譯時的多態性。靜態多態性的函數調用速度快、效率高但缺乏靈活性,在程序運行前就應決定執行的函數和方法。

動態多態性的特點是:不在編譯時確定調用的是哪個函數,而是在程序運行過程中才動態地確定操作所針對的對象。又稱運行時的多態性。動態多態性是通過虛函數(virtual function)實現的。

Ⅵ 解釋多態性

多態性分生物上的概念和計算機技術上的概念,以下是兩個領域的對於多態性的有關解釋,希望對你有用

1 多態性是指一個基因座位上存在多個等位基因。就某一個體基因座位而言,最多隻能有兩個等位基因,分別來自父母方的同源染色體上。因而, MHC 多態性指的是一個群體概念,即群體中不同個體在等位基因擁有狀態上存在的差別。 HLA 是人體中多態性最豐富的基因系統,其等位基因的數目有 1031 個之多,且均為共顯性基因,若按隨機組合,人群中的基因型可達 10 12 種。因此,人群中除同卵雙生外,無關個體間 HLA 型別完全相同的可能性極小。 HLA 多態性主要表現在經典的 I 、 II 類基因,這與 I 、 II 類基因產物參與提呈抗原肽有關。 MHC 多態性使得種群能對各種病原體產生合適的免疫應答,應付多變的環境條件,以維持群體的穩定性。

在遺傳生態學上一般用遺傳多樣性,比如同一物種遺傳後代的多樣性、種群遺傳多樣性、品種遺傳多樣性。
而在遺傳學、分子遺傳學等領域用多態性,比如基因多態性、電泳條帶的多態性等.

說遺傳多態性的比較少見,一般說DNA多態性等,比如利用 DNA 多態性進行多種突變檢測,用於物種鑒定,種群結構分析和遺傳多樣性研究。不過也有少數用遺傳多態性表示的,但其前面一般加上個定語,如DNA遺傳多態性,同工酶遺傳多態性。

2 多態性的實現與靜態聯編、動態聯編有關。靜態聯編支持的多態性稱為編譯時的多態性,也稱靜態多態性,它是通過函數重載和運算符重載實現的。動態聯編支持的多態性稱為運行時的多態性,也稱動態多態性,它是通過繼承和虛函數實現的。

C++允許在參數類型不同的前提下重載函數。重載的函數與具有多態性的函數(即虛函數)不同處在於:調用正確的被重載函數實體是在編譯期間就被決定了的;而對於具有多態性的函數來說,是通過運行期間的動態綁定來調用我們想調用的那個函數實體。多態性是通過重定義(或重寫)這種方式達成的。請不要被重載(overloading)和重寫(overriding)所迷惑。重載是發生在兩個或者是更多的函數具有相同的名字的情況下。區分它們的辦法是通過檢測它們的參數個數或者類型來實現的。重載與CLOS中的多重分發(multiple dispatching)不同,對於參數的多重分發是在運行期間多態完成的。

Ⅶ 什麼是多態

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

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

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

拓展資料:

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

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

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

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

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

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

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

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

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

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

Ⅷ c++中,可將多態性分為編譯時的多態性和()

編譯時的多態性:就是在程序編譯的時候,也就是生成解決方案的時候就決定要實現什麼操作。而運行時的多態性:就是指直到系統運行時,才根據實際情況決定實現何種操作。

閱讀全文

與編譯時的多態性被稱為相關的資料

熱點內容
模擬51單片機 瀏覽:864
密碼器單片機 瀏覽:380
php訂單處理 瀏覽:248
安慶程序員接私活哪裡接 瀏覽:977
程序員那麼可愛第9集預告片 瀏覽:668
手機解壓縮工具在哪 瀏覽:756
如何啟用阿里雲伺服器 瀏覽:737
python里有trim函數嗎 瀏覽:689
pdf裡面的文字怎麼復制 瀏覽:900
ps切圖壓縮 瀏覽:298
linux刪除db2 瀏覽:283
用prim演算法求公路最優解程序 瀏覽:640
gpu編譯android 瀏覽:603
miui刷機顯示加密中 瀏覽:581
linuxqt圖形界面 瀏覽:718
c語言常用的排序演算法 瀏覽:761
php寫本地文件 瀏覽:978
光影魔術手批量壓縮圖片 瀏覽:656
python菜鳥面向對象 瀏覽:707
考蟲講義PDF 瀏覽:551