您想的有點復雜化了,簡單的說吧,您說的運行時的多態是分為可執行文件和非可執行文件,也就是說您的程序打沒打包,而您說的編譯時的多態也分為兩種;1、重載。2、繼承。前者是靜態的多態形式也就是說不可以用於多個類;針對方法,後者是可以在多個類之間使用,要記得只可以子類繼承父類,不可『以下犯上』。就像是java中的類型,一個是private,另一個是public。
⑵ C++的多態如何在編譯和運行期實現
還是得通過一個例子來看看C++是怎樣在編譯期和運行期來實現多態的。很簡單,定義了一個Father類,它有一個testVFunc虛函數喲。再定義了一個繼承Father的Child類,它重新實現了testVFunc函數,當然,它也學習Father定義了普通的成員函數testFunc。大家猜猜程序的輸出是什麼?[cpp]view plain#include<iostreamusingnamespacestd;classFather{public:intm_fMember;voidtestFunc(){ cout<< "FathertestFunc" <<m_fMember<<endl;}virtualvoidtestVFunc(){ cout<<
⑶ 編譯時的多態是指針還是對象
編譯時的多態,既不是指針,也不是對象,其實就是一個宏。
如果運行時的多態這樣:
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++和面向對象根本就是變態!
⑷ 編譯時的多態性和運行時的多態性在實現方法上有何不同
我不知道你哪本書上看到的,但是,只要不是後綁定就不能稱為多態,前綁定只能稱為代碼重用,比如函數的重載、覆蓋以及一般的類繼承。
多態的關鍵特點就是:在運行時虛基類指針指向派生類對象地址,而將派生類對象地址賦值給基類指針,這就是所謂的後綁定,編譯時綁定稱為前綁定,因此多態另一個特點就是「動態「。換句話說,如果是後綁定,編譯器事先是不知道在運行時指針將指向哪一種派生類的對象,因此基類指針必須是「虛「的,虛基類中不能有任何實現只有定義,此時虛基類的作用就是一個類介面,這樣才能在編譯時「模糊」掉類型匹配原則,基類的作用只是個約定,定義了函數調用格式,而只在運行時才確定指針具體指向哪一個對象。
而所謂編譯時的多態性根本不存在,如果編譯器能確定基類指針指向哪一個派生類對象地址,就不是多態,哪怕你採用重載覆蓋或者繼承,這些編譯器已經可以預知的事情,一旦編譯完成就固定了,運行時無法更改的,比如你不能在不重新編譯的情況下增加一個重載,這就制約了程序運行時的靈活性以及可擴充性。而多態完全可以實現「熱「更新,更多的是便於程序的可擴充性。你完全可以將派生類編譯在DLL中,每當更新程序時,只要替換掉DLL而不用重新編譯全部代碼。
⑸ 請問一下Java里編譯時多態和運行時多態的區別,最好舉個例,謝謝
個人看法
多態的概念 父類引用指向子類對象 而實際調用的方法為子類的方法。
編譯時多態 Java里叫重載 嚴格來說不叫多態 運行時多態 有繼承 有重寫 父類引用指向子類對象
例子我看就算了 書上多 的是
⑹ 1. 編譯時的多態性與運行時的多態性有什麼區別,他們的實現方法有什麼不同
多態從實現的角度可以劃為兩類:編譯時多態和運行時多態。
編譯時的多態性:就是在程序編譯的時候,也就是生成解決方案的時候就決定要實現什麼操作。
運行時的多態性:就是指直到系統運行時,才根據實際情況決定實現何種操作。
1、多態實現形式不同:
編譯時的多態是通過靜態連編來實現的;運行時的多態是用動態連編來實現的。
2、多態性通過方式不同:
編譯時的多態性主要是通過函數重載和運算符重載來實現的;運行時的多態性主要是通過虛函數來實現的。
(6)多態編譯擴展閱讀:
靜態多態性又稱編譯時的多態性。靜態多態性的函數調用速度快、效率高但缺乏靈活性,在程序運行前就應決定執行的函數和方法。
動態多態性的特點是:不在編譯時確定調用的是哪個函數,而是在程序運行過程中才動態地確定操作所針對的對象。又稱運行時的多態性。動態多態性是通過虛函數(virtual function)實現的。
⑺ c++中,可將多態性分為編譯時的多態性和()
編譯時的多態性:就是在程序編譯的時候,也就是生成解決方案的時候就決定要實現什麼操作。而運行時的多態性:就是指直到系統運行時,才根據實際情況決定實現何種操作。
⑻ 編譯時多態性使用什麼獲得!A重載函數B繼承C虛函數D.B和C
函數重載和模板。就這題來說選A。
繼承和虛函數對應的多態需要在運行的時候才能確定具體對象,所以不屬於編譯時多態。
函數重載是讓一個函數名對應多個函數,編譯器會根據調用時候的特徵確定要調用的函數,不需要再運行時處理。
而模板是讓一個一個類型模板或者函數模板對應多個類型或者函數,編譯器根據對模板實例化是使用的參數生成具體的類和函數,也不是在運行時進行的。
另外注意模板變數不屬於多態范疇。
⑼ 請問 c++中 模板是 編譯時多態還是運行時多態,或者都不是,求解
是編譯時多態。所有的模板都是在編譯時產生對應的代碼,它沒有面向對象中的虛表,無法實現動態多態。
你仔細想一想,模板在應用時都必須指定確定的類型,而運行多態僅需指定一個基類就OK啦。
⑽ 在java多態中,編譯看左邊,運行看右邊是什麼意思,哪位大俠能幫忙詳細解釋一下 謝謝了.
Animal c = new Cat(); 左邊是 Animal 類(或介面) 右邊是 Cat()類; 在編譯的時候編譯器不管你右邊是什麼類,只要左邊的Animal類(或介面)能編譯通過就不會報錯。但是運行的時候就要按照右邊的Cat()類實際情況來運行。