⑴ 編譯時多態性使用什麼獲得!A重載函數B繼承C虛函數D.B和C
函數重載和模板。就這題來說選A。
繼承和虛函數對應的多態需要在運行的時候才能確定具體對象,所以不屬於編譯時多態。
函數重載是讓一個函數名對應多個函數,編譯器會根據調用時候的特徵確定要調用的函數,不需要再運行時處理。
而模板是讓一個一個類型模板或者函數模板對應多個類型或者函數,編譯器根據對模板實例化是使用的參數生成具體的類和函數,也不是在運行時進行的。
另外注意模板變數不屬於多態范疇。
⑵ 編譯時的多態性和運行時的多態性在實現方法上有何不同
我不知道你哪本書上看到的,但是,只要不是後綁定就不能稱為多態,前綁定只能稱為代碼重用,比如函數的重載、覆蓋以及一般的類繼承。
多態的關鍵特點就是:在運行時虛基類指針指向派生類對象地址,而將派生類對象地址賦值給基類指針,這就是所謂的後綁定,編譯時綁定稱為前綁定,因此多態另一個特點就是「動態「。換句話說,如果是後綁定,編譯器事先是不知道在運行時指針將指向哪一種派生類的對象,因此基類指針必須是「虛「的,虛基類中不能有任何實現只有定義,此時虛基類的作用就是一個類介面,這樣才能在編譯時「模糊」掉類型匹配原則,基類的作用只是個約定,定義了函數調用格式,而只在運行時才確定指針具體指向哪一個對象。
而所謂編譯時的多態性根本不存在,如果編譯器能確定基類指針指向哪一個派生類對象地址,就不是多態,哪怕你採用重載覆蓋或者繼承,這些編譯器已經可以預知的事情,一旦編譯完成就固定了,運行時無法更改的,比如你不能在不重新編譯的情況下增加一個重載,這就制約了程序運行時的靈活性以及可擴充性。而多態完全可以實現「熱「更新,更多的是便於程序的可擴充性。你完全可以將派生類編譯在DLL中,每當更新程序時,只要替換掉DLL而不用重新編譯全部代碼。
⑶ 請問一下java里編譯時多態和運行時多態的區別,最好舉個例,謝謝
個人看法
多態的概念 父類引用指向子類對象 而實際調用的方法為子類的方法。
編譯時多態 Java里叫重載 嚴格來說不叫多態 運行時多態 有繼承 有重寫 父類引用指向子類對象
例子我看就算了 書上多 的是
⑷ 編譯時的多態是指針還是對象
編譯時的多態,既不是指針,也不是對象,其實就是一個宏。
如果運行時的多態這樣:
class A
{
virtual int f() = 0;
}
class A1 : public A
{
int f() {return 1;}
}
class A2 : public A
{
int f() {return 2;}
}
那麼編譯時多態相當於這樣寫:
class A
{
#ifdef _THIS_IS_CLASS_A1_
int f() {return 1;}
#elif defined _THIS_IS_CLASS_A2_
int f() {return 2;}
#endif
};
最後,結論:C++和面向對象根本就是變態!
⑸ 1. 編譯時的多態性與運行時的多態性有什麼區別,他們的實現方法有什麼不同
多態從實現的角度可以劃為兩類:編譯時多態和運行時多態。
編譯時的多態性:就是在程序編譯的時候,也就是生成解決方案的時候就決定要實現什麼操作。
運行時的多態性:就是指直到系統運行時,才根據實際情況決定實現何種操作。
1、多態實現形式不同:
編譯時的多態是通過靜態連編來實現的;運行時的多態是用動態連編來實現的。
2、多態性通過方式不同:
編譯時的多態性主要是通過函數重載和運算符重載來實現的;運行時的多態性主要是通過虛函數來實現的。
(5)編譯時多態屬於後期綁定擴展閱讀:
靜態多態性又稱編譯時的多態性。靜態多態性的函數調用速度快、效率高但缺乏靈活性,在程序運行前就應決定執行的函數和方法。
動態多態性的特點是:不在編譯時確定調用的是哪個函數,而是在程序運行過程中才動態地確定操作所針對的對象。又稱運行時的多態性。動態多態性是通過虛函數(virtual function)實現的。
⑹ 關於Java的編譯時多態和運行時多態
您想的有點復雜化了,簡單的說吧,您說的運行時的多態是分為可執行文件和非可執行文件,也就是說您的程序打沒打包,而您說的編譯時的多態也分為兩種;1、重載。2、繼承。前者是靜態的多態形式也就是說不可以用於多個類;針對方法,後者是可以在多個類之間使用,要記得只可以子類繼承父類,不可『以下犯上』。就像是java中的類型,一個是private,另一個是public。
⑺ Java代碼的編譯期綁定和運行期綁定是什麼意思
如果打包成jar的話很好如果是exe的話就有點麻煩了可參考:想要把java生成可執行文件需要第三方軟體的支持,不過在沒有安裝JDK的機器上是不可能運行JAVA程序的,哪怕是編譯成為exe文件。將Java應用程序本地編譯為EXE的幾種方法(推薦使用JOVE和JET)1.從獲得一個TowerJ編譯器,該編譯器可以將你的CLASS文件編譯成EXE文件。2.利用微軟的SDK-Java4.0所提供的jexegen.exe創建EXE文件,這個軟體可以從微軟的網站免費下載,地址如下:7.Instantiations公司的JOVE/jove/ejovesystem.htmJOVE公司合並了以前的SuperCede,一個優秀的本地編譯器,現在SuperCede已經不復存在了。8.JToEXEBravoZuluConsulting,Inc開發的一款本地編譯器,本來可以從該公司的網頁上免費下載的,不過目前在該公司的主頁上找不到了。
⑻ C#中的多態問題
多態又稱後期綁定,是一種在運行時(just in time)指定方法調用地址的技術。
通常,編譯器在編譯期就能知道方法的地址,運行時直接載入這個地址上的堆棧代碼(.net中指中間代碼)就可以了,這被稱為靜態綁定或前期綁定,雖然很少使用這個術語。
編譯器在編譯期不能確定方法的地址,而只能在運行時確定的就被稱為後期綁定(或動態聯編)。例如,對於object類的ToString方法,其方法定義是返回類的名稱,但是,調用這個方法卻不一定能夠返回類的名稱(如String類),因為它有可能被派生類重寫,多態技術確保運行時能夠調用到正確的方法。
關於多態和繼承的區別,繼承實現了類型重用,而多態實現了方法重用。
⑼ C++多態運行期綁定(後期綁定)的實現需要具備哪些前提條件
(1)滿足類型兼容規則
類型兼容的問題只在公有繼承下存在,有以下三種情況:
1)派生類對象可賦值給基類對象
2)派生類的對象可以初始化基類的引用
3)派生類的地址可以賦值給基類的指針
(2)基類中定義虛函數,並且派生類中要重新定義虛函數(注意和重載的區別)
(3)由成員函數或者通過指針、引用訪問虛函數。
⑽ override是屬於運行時多態還是編譯多態
運行時多態,根據運行時調用參數對象不同,選擇不同的方法