C 動態繫結 多型

2021-09-24 13:47:37 字數 1141 閱讀 3785

繫結:

繫結就是將函式呼叫與位址關聯起來。

普通的成員變數、成員函式、編譯完的時候,呼叫位址就確定好的。

virtual函式的位址是不確定的,只是能確定虛表的位址,virtual函式有可能被重寫。

只有virtual的函式是動態繫結。

動態繫結還有乙個名字:多型。

常用場景:析構函式定義為虛函式。 (否則定義父類指標去訪問子類,最後可能釋放的是父類的空間而不是子類的空間,從而出錯)。

如果使用父類指標去訪問子類的方法(函式),只有乙個辦法就是多型virtual。

#includeclass base

void fun1(void)

virtual void fun2(void) };

class sub:public base

void fun1(void)

virtual void fun2(void) };

void test(base * pb)

int main(int argc,char *ar**)

此程式沒有使用virtual多型,每次呼叫只會呼叫父類的printf()函式。

執行結果:

base: 100  200

base: 111  222

base: 77  88

press any key to continue

#includeclass base

void print() };

class sub1:public base

void print() };

class sub2:public base

void print() };

void test(void)

; int i;

for(i=0; i<3;i++) }

int main(int argc,char *ar**)

加上virtual,使之提現多型性後,結果如下:

base: 100  200

sub1: 111  222  333

sub2: 77  88  66

press any key to continue

多型,動態繫結

呼叫方法時,只要方法重寫了,實際當中調哪個,要看實際中new哪個物件。color red 好處 可擴充套件性達到最好。color 當增加東西時,不需要改原來的結構,直接加上就可以了。color red 多型的存在必要條件 1 要有繼承,2 要有重寫,3 父類引用指向子類物件。color packag...

動態繫結和多型

動態繫結是指 在執行期間 即非編譯期 判斷所引用物件的實際型別,根據其實際的型別呼叫其相應的方法。多型的存在有三個必要條件 1,要求繼承 2,要有重寫 3,父類引用指向子類物件 例 class animal public void enjoy class cat extends animal pub...

多型 動態繫結 實驗

定義三個類,父類geometricobject代表幾何形狀,子類circle代表圓形,myrectangle代表矩形。定義乙個測試類test,編寫equalsarea方法測試兩個物件的面積是否相等 注意方法的引數型別,利用動態繫結技術 編寫displaygeometricobject方法顯示物件的面...