C 虛函式多型的意義

2021-10-10 00:27:01 字數 1176 閱讀 4710

假設

a是父類,裡面有virtual fun()。

b、c是public繼承的子類,override了fun()。

建立物件引用,多型有以下**:

b b;

c c;

a& n=b;

a& m=c;

n.fun()

;m.fun(

);

我在想,多型有什麼意義呢?為什麼要把子類引用給父類呢?這不是多次一舉嗎?

直接b& n=b; c& m=c;他不香嗎?

反正都是兩行**,分配的記憶體空間也是一樣大小的,效能也沒有差別。

【文章開頭的非多型版】

intprice_diff

(huawei&

,xiaomi&);

intprice_diff

(xiaomi&

,huawei&);

intprice_diff

(huawei&);

intprice_diff

,huawei&);

intprice_diff

(xiaomi&);

intprice_diff

,xiaomi&);

huawei mate40;

xiaomi mi10;

cout <<

price_diff

(mate40,mi10)

<< endl;

cout <<

price_diff

(iphone11,mi10)

<< endl;

//可以看到,當廠商種類多起來後,將要過載price_diff函式的個數為n的階乘個。

【多型版】

intprice_diff

(phone&

,phone&);

huawei mate40;

xiaomi mi10;

cout <<

price_diff

(mate40,mi10)

<< endl;

cout <<

price_diff

(iphone11,mi10)

<< endl;

C 多型,虛函式

在c 中可以用基類指標指向其派生類,如果乙個派生類繼承多個父類,那麼如何通過基類指標訪問同名的成員呢?如果基類a,基類b中都有函式fun 派生類在同時繼承a b後在記憶體中根據繼承的順序分配記憶體,例如在繼承列表中出現的是b,a,那麼b中的成員在a的之前,當我們用b的指標去訪問時候,編譯器便將指標指...

C 虛函式多型

由虛函式實現的動態多型性就是 同一類族中不同類的物件,對同一函式呼叫作出不同的響應。虛函式的使用方法是 1 在基類用virtual宣告成員函式為虛函式。這樣就可以在派生類中重新定義此函式,為它賦予新的功能,並能方便地被呼叫。在類外定義虛函式時,不必再加virtual。2 在派生類中重新定義此函式,要...

C 多型,虛函式

多型是指使用相同的函式名來訪問函式不同的實現方法,即 一種介面,多種方法 用相同的形式訪問一組通用的運算,每個運算可能對應的行為不同。c 支援編譯時多型和執行時多型,運算子過載和函式過載就是編譯時多型,而派生類和虛函式實現執行時多型。執行時多型的基礎是基類指標,基類指標可以指向任何派生類物件。2.虛...