如何通過指標訪問虛函式表,並且呼叫裡面的方法

2022-09-09 00:39:21 字數 911 閱讀 5556

昨天面頭條,,,最後面試官問道如何用指標訪問虛函式表的東西。。。然後瞎寫了一通,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()

輸出結果為

$ ./main11

1111

今天記錄下如何用指標訪問虛函式表,並且呼叫裡面的方法。

#include using

namespace

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 帶純虛函式的類叫虛基類也叫抽象類,這種基類不能...