靜態多型 模版模擬多型

2021-06-26 01:31:29 字數 794 閱讀 1323

虛函式的使用會帶來額外的開銷,具有虛函式的class型別都需要一張虛函式表,而每多乙個虛函式,對應型別的物件的大小就會增加4bytes(32位機器下),誇張的試想一下如果有10個父類,每個父類都有100個虛函式的情況下,每個物件會增加多少?

4x10x100=4000bytes!

除了空間上的開銷,每個虛函式的呼叫在時間上都會比普通函式多一次整形加法和一次指標間接引用,也就是時間上的開銷。

templateclass basic

protected:

inline derived* selfcast()

};class derived1 : public basic

inline void print()

};class derived2 : public basic

inline void print()

static std::string name()

};

呼叫方法:、

basic* der1 = new derived1();

der1->print();

basic* der2 = new derived2();

der2->print();

輸出結果:

derived1 print

derived2 print

這裡實現的關鍵是

selfcast函式,通過static_cast把當前物件強制轉換為具體指定的子類物件,這裡是derived1。

C 多型 C語言模擬多型

目錄 c 多型 c語言模擬多型 c 中的多型,從使用的角度上來概括,就是在父類的某函式前加上關鍵字virtual,然後在子類中重寫這個函式。在呼叫的過程中,會根據物件的型別來決定呼叫哪個函式,如果物件類是父類就呼叫父類的函式,如果物件類是子類就呼叫子類中的函式。首先,來看一組 class one輸出...

靜態多型 動態多型

又稱編譯期多型,即在系統編譯期間就可以確定程式將要執行哪個函式。例如 函式過載,通過類成員運算子指定的運算。函式過載示例 class a a int x void f void f int x class b void f void f int x 以上,類a中兩個a 是函式過載,兩個f 是函式過載...

C 多型 靜態多型與動態多型

多型 顧名思義,多型就是多種形態,也就是對不同物件傳送同乙個訊息,不同物件會做出不同的響應。並且多型分為靜態多型和動態多型。靜態多型就是在系統編譯期間就可以確定程式執行到這裡將要執行哪個函式,例如 函式的過載,物件名加點操作符執行成員函式等,都是靜態多型,其中,過載是在形成符號表的時候,對函式名做了...