昨天面頭條,,,最後面試官問道如何用指標訪問虛函式表的東西。。。然後瞎寫了一通,gg了應該。
昨天的答案
fun = (fun)((int)(((base*)0)->f)+4);fun()
額。。。。昨天的**是編譯也通不過的。。。因為c++是無法獲取 任何方法位址的。。。簡單的demo測試。。。
#include using namespace std;class a
void f()
virtual void g()
static void h()
};int main()
輸出結果為
$ ./main111111
今天記錄下如何用指標訪問虛函式表,並且呼叫裡面的方法。
#include usingnamespace
std;
class
base
virtual
void
f()
virtual
void
g()
virtual
void
h()
};class derive: public
base
void
f()
void
g()
};//
乙個很有趣的問題。。。。為什麼這裡不需要用注釋這中typedef...
////
typedef void (*fun)(derive *ptr);
typedef void (*fun)();
intmain()
虛函式表指標,虛函式表
對c 了解的人都應該知道虛函式 virtual function 是通過一張虛函式表 virtual table 來實現的。簡稱為v table。在這個表中,主是要乙個類的虛函式的位址表,這張表解決了繼承 覆蓋的問題,保證其容真實反應實際的函式。這樣,在有虛函式的類的例項中這個表被分配在了 這個例項...
虛函式表和虛函式表的指標
有虛函式的類都有乙個虛函式表,它是實現多型的關鍵。虛函式表可以繼承,如果子類沒有重寫虛函式,那麼子類虛函式表中仍然會有該函式的位址,只不過這個位址指向的是基類的函式實現。如果子類重寫了相應的虛函式,那麼虛函式表中的位址就會改變,指向自身的函式實現。如果派生類中有自己的虛函式,那麼虛函式表中會新增該項...
C 虛函式指標虛函式表
c 的多型可以分為靜態多型和動態多型。函式過載和運算子過載實現的多型屬於靜態多型,而通過虛函式可以實現動態多型。實現函式的動態聯編其本質核心則是虛表指標與虛函式表。1.虛函式與純虛函式區別 1 虛函式在子類裡面也可以不過載的 但純虛必須在子類去實現 2 帶純虛函式的類叫虛基類也叫抽象類,這種基類不能...