導航:首頁 > 源碼編譯 > 動態聯編是在編譯時確定操作系數

動態聯編是在編譯時確定操作系數

發布時間:2022-10-28 23:03:56

❶ 淺談靜態聯編和動態聯編的區別和實現動態聯編的

聯編是指一個程序自身彼此關聯的過程。按照聯編所進行的階段不同,可分為靜態聯編和動態聯編。
靜態聯編又稱靜態綁定,指在調用同名函數(即重載函數)時編譯器將根據調用時所使用的實參在編譯時就確定下來應該調用的函數實現。它是在程序編譯連接階段進行聯編的,這種聯編又稱為早期聯編,這是因為這種聯編工作是在程序運行之前完成的。它的優點是速度快,效率高,但靈活性不夠。
編譯時所進行的聯編又稱為靜態束定。束定是指確定所調用的函數與執行該函數代碼之間的關系。
動態聯編也稱動態綁定,是指在程序運行時,根據當時的情況來確定調用的同名函數的實現,實際上就是在運行時選擇虛函數的實現。這種聯編又稱為晚期聯編或動態(束定。實現條件:①要有繼承性且要求創建子類型關系;)②要有虛函數;③通過基類的對象指針或引用訪問虛函數。繼承是動態聯編的基礎,虛函數是動態聯編的關鍵,虛函數經過派生之後,在類族中就可以實現運行過程中的多態。動態聯編要求在運行時解決程序中的函數調用與執行該函數代碼間的關系,調用虛函數的對象是在運行時確定的。對於同一個對象的引用,採用不同的聯編方式將會被聯編到不同類的對象上。即不同聯編可以選擇不同的實現,這便是多態性。它的優點是靈活性強,但效率較低。

❷ 誰知道C++語言的精髓

C++主要在C的基礎上凸顯了類的概念。
C++的特點:封裝、繼承、多態。

封裝:隱藏對象的屬性和實現細節,僅對外公開介面,控制在程序中屬性的讀和修改的訪問級別。
封裝就是將抽象得到的數據和行為(或功能)相結合,形成一個有機的整體,也就是將數據與操作數據的源代碼進行有機的結合,形成「類」,其中數據和函數都是類的成員。

繼承:繼承是指一個對象直接使用另一對象的屬性和方法。
C++的繼承方式有三種:public公有繼承、protected保護繼承、private私有繼承,默認為private繼承。

多態:指同一個實體同時具有多種形式。
C++中,實現多態有以下方法:虛函數,抽象類,重載,覆蓋,模版。

在C++中,聯編是指一個計算機程序的不同部分彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法:靜態聯編和動態聯編。

靜態聯編是指聯編工作在編譯階段完成的,這種聯編過程是在程序運行之前完成的,又稱為早期聯編。要實現靜態聯編,在編譯階段就必須確定程序中的操作調用(如函數調用)與執行該操作代碼間的關系,確定這種關系稱為束定,在編譯時的束定稱為靜態束定。靜態聯編對函數的選擇是基於指向對象的指針或者引用的類型。其優點是效率高,但靈活性差。它的方式有:重載和模板。

動態聯編是指聯編在程序運行時動態地進行,根據當時的情況來確定調用哪個同名函數,實際上是在運行時虛函數的實現。這種聯編又稱為晚期聯編,或動態束定。動態聯編對成員函數的選擇是基於對象的類型,針對不同的對象類型將做出不同的編譯結果。動態聯編的優點是靈活性強,但效率低。他的方式有:虛函數和多態。

C++中一般情況下的聯編是靜態聯編,但是當涉及到多態性和虛函數時應該使用動態聯編。

❸ C++多態性的一道經典例題

這個例子一般在很多教材上都可以找的。
要求大概不是讓你運行後生成某一個圖形,模擬一下而已~
多態 有編譯時的多態(靜態聯編,即編譯時確定操作對象) 和 運行時的多態(動態聯編,即運行時確定操作對象),而虛函數是實現動態聯編的基礎。

繼承是實現代碼重用 而 多態 是實現 介面重用,介面是最有價值的資源,設計介面需要耗費更昂貴的人力和時間。

舉個簡單的例子:
飛機是一個總成,它可以派生出 客機,直升機 。
所以可以設計 一個基類 「飛機」 然後公有派生出 「客機」 「直升機」

飛機都可以起飛,所以在基類「飛機」中設計一個 虛函數 fly(),顯然「客機」和「直升機」有不同的起飛方式,所以,在「客機」和「直升機」中
繼承來的fly()函數應當是不同的,即相同的函數有不同的實現。

然後假設用 「飛機」生成一個指針型的對象 *p,「客機」「直升機」也分別生成各自的對象, 把「客機」的對象賦給*plan,則用plan調用fly(),則按照客機的起飛方式起飛,把「直升機」的對象賦給*plan,用plan調用fly()則按照直升機起飛的方式 起飛。

所以多態是允許你將父對象設置成為一個或更多的它的子對象相等的技術,賦值之後,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作。

❹ C++關於動態聯編

動態聯編其實也就是動態多態性,它是通過基類指針和虛函數實現的,即先定義一個基類指針,然後通過基類指針指向不同的類對象,調用對應的虛函數。
例如:
void main()
{ A a; //定義類A對象a
B b; //定義類B對象b
C c; //定義類C對象c

A *p;//定義一個基類指針p
p=&a; //基類指針p指向基類A的對象a
p->my(); //此時調用的是基類A的my()函數

p=&b; //基類指針p指向類B的對象b
p->my(); //此時基類指針p調用的是類B的my()函數

p=&c; //基類指針p指向類C的對象c
p->my(); //此時基類指針p調用的是類C的my()函數
}

❺ C++中「析構函數中調用虛函數採用靜態聯編」為什麼正確

在構造函數和析構函數中調用虛函數,編譯系統對構造函數和析構函數中調用虛函數採用靜態聯編,因為它們所調用的虛函數是自己的類,或者基類中定義的函數而不是在任何派生類中重定義的函數。所有這句話說的是正確的。

下面介紹一些相關知識:
什麼是靜態聯編:
即在編譯過程中進行聯編被稱為靜態聯編(static binding),又稱為靜態綁定、早期聯編。

什麼是動態聯編:
即編譯器必須能夠在程序運行時選擇正確的函數的代碼,這被稱為動態聯編(dynamic binding),又稱為動態綁定、晚期聯編。

什麼是虛函數:
虛函數的作用主要是實現了多態的機制。關於多態,簡而言之就是用基類型別的指針指向其派生類的實例,然後通過基類的指針調用實際派生類的成員函數(基類指針可調用同名覆蓋方法)。這種技術可以讓基類的指針有「多種形態」,這是一種泛型技術。所謂泛型技術,說白了就是試圖使用不變的代碼來實現可變的演算法。比如:模板技術,RTTI技術,虛函數技術,要麼是試圖做到在編譯時決議,要麼試圖做到運行時決議。

❻ 動態聯編是在運行時選定調用的成員函數的

是的,你可以使用靜態編譯和動態編譯後反匯編比較一下!

❼ 如果派生類中沒有對基類的虛函數進行重定義,則它繼承基類中的()

D

D
動態聯編是指函數編譯時先不確定具體調用一個繼承函數鏈上的哪一個函數,而留到程序執行時再決定,這樣編譯時在函數調用的地方就要多保存一個函數地址的鏈表(或類似結構),執行函數時也多了一個判斷具體調用哪一個函數的過程,效率當然比普通的靜態聯編來得低

❽ c++ 靜態關聯和動態關聯是什麼意思

1,如果是通過對象名調用虛函數,在編譯階段就能確定調用的是哪一個類的虛函數,所以屬於靜態關聯。
2,如果通過基類指針調用虛函數,如pt=&point;pt->shapeName();,在編譯階段無法從語句本身確定調用哪一個類的虛函數,只有在運行時,pt指向某一個類對象之後,才能確定調用的是哪一個類的虛函數,故為動態關聯。

❾ 聯編的動態聯編

動態聯編又稱動態關聯、動態束定、後期聯編、晚期聯編。
動態聯編是指編譯程序在編譯階段並不能確切地知道將要調用的函數,只有在程序執行時才能確定將要調用的函數,為此要確切地知道將要調用的函數,要求聯編工作在程序運行時進行,這種在程序運行時進行的聯編工作被稱為動態聯編。C++規定:動態聯編是在虛函數的支持下實現的。
動態聯編必須包括以下方面:
1、成員函數必須聲明為virtual
2、如果基類中聲明了為虛函數,則派生類中不必再聲明。
調用方式:
通過對象的指針或引用調用成員函數,或通過成員函數調用,反之就無法實現動態聯編。 #include<iostream>#include<string>usingnamespacestd;classCBuilding{//定義建築類stringname;//定義名稱public:voidset(stringstrName);//修改名稱virtualvoiddisplay()//顯示信息,這里是內聯函數,而且聲明為虛函數{cout<<建築是<<name<< ;}};//建築類定義完畢voidCBuilding::set(stringstrName){//修改名稱方法的實現name=strName;}classCBridge:publicCBuilding{//通過繼承來定義橋類floatlength;//定義長度public:voidsetLength(floatl=0.0){length=l;}//設置長度voiddisplay(){CBuilding::display();//調用基類方法顯示名稱cout<<其長度是<<length<<米。 ;//顯示長度信息}};//橋類定義完畢voidmain(){CBuildingbuilding;//創建建築對象CBridgebridge;//創建橋對象building.set(中國古代建築);//設置名稱building.display();//顯示信息bridge.set(中國趙州橋);//設置橋的名稱bridge.setLength(static_cast<float>(60.40));//修改橋的長度bridge.display();//顯示橋的信息return;}這就是動態聯編,編譯器在程序運行時才知道這個函數的具體作用。

閱讀全文

與動態聯編是在編譯時確定操作系數相關的資料

熱點內容
自己購買雲主伺服器推薦 瀏覽:419
個人所得稅java 瀏覽:761
多餘的伺服器滑道還有什麼用 瀏覽:189
pdf劈開合並 瀏覽:26
不能修改的pdf 瀏覽:750
同城公眾源碼 瀏覽:488
一個伺服器2個埠怎麼映射 瀏覽:297
java字元串ascii碼 瀏覽:78
台灣雲伺服器怎麼租伺服器 瀏覽:475
旅遊手機網站源碼 瀏覽:332
android關聯表 瀏覽:945
安卓導航無聲音怎麼維修 瀏覽:332
app怎麼裝視頻 瀏覽:430
安卓系統下的軟體怎麼移到桌面 瀏覽:96
windows拷貝到linux 瀏覽:772
mdr軟體解壓和別人不一樣 瀏覽:904
單片機串列通信有什麼好處 瀏覽:340
游戲開發程序員書籍 瀏覽:860
pdf中圖片修改 瀏覽:288
匯編編譯後 瀏覽:491