2013-09-21 46 views
1

如果我有C++虛函數表的實現與多親多態層次

一個< - B(其中兩個是多態)

有呼籲B.函數時間接兩個層面首先查找以確定什麼類型的A對象,然後在所有B中找到該函數的查找。

現在,如果我有:

一個< - B < -C(一切皆態類)

這是否意味着,當我呼籲C中的函數它要經過四個層次的間接(兩個B和兩個A)?

+1

當你從一個類型派生出來的時候,編譯器必須知道完整的類型(包括虛函數),所以編譯器可以很容易地把所有東西都燒入vtable。然後對於任何繼承級別:var.vtbl [func_idx]() – John5342

回答

3

在vtable中總是隻查找一個函數並調用函數。繼承樹的深度沒有區別。當涉及多重繼承時(即,具有多個鹼基的類),也可能需要調整成爲指針的指針。