亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何獲取C++類成員虛函數(shù)地址的示例代碼

 更新時間:2017年08月17日 08:54:54   作者:Dablelv  
這篇文章主要給大家介紹了關于C++如何獲取類成員虛函數(shù)地址的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。

本文主要給大家介紹了關于如何獲取C++類成員虛函數(shù)地址的相關內(nèi)容,分享出來供大家參考學習,話不多說了,來一起看看詳細的介紹:

1.GCC平臺

GCC平臺獲取C++成員虛函數(shù)地址可使用如下方法[1]:

class Base{
 int i;
public:
 virtual void f1(){
  cout<<"Base's f1()"<<endl;
 }
};

Base b;
void (Base::*mfp)() = &Base::f1;
printf("address: %p", (void*)(b->*mfp));

上面的代碼在Linux g++ (GCC) 4.8.5中編譯通過。

2.Visual C++平臺

可以采用內(nèi)聯(lián)匯編的方式獲取[2],代碼如下:

#define ShowFuncAddress(function) _asm{\
 mov eax, function}\
 _asm{mov p,eax}\
 cout<<"Address of "#function": "<<p<<endl;

//使用示例
ShowFuncAddress(Base::f1);

上面的代碼在VS2015中編譯通過。

3.通過訪問虛函數(shù)表獲取虛函數(shù)地址

下面的代碼可以在GCC和Visual C++共同編譯運行。

/**********************
@className:類名稱
@pObj:類對象地址
@index:虛函數(shù)表項(從0開始)
**********************/
void showVtableContent(char* className, void* pObj, int index){
 unsigned long* pAddr=NULL;
 pAddr=reinterpret_cast<unsigned long*>(pObj);
 pAddr=(unsigned long*)*pAddr;  //獲取虛函數(shù)表指針
 cout<<className<<"'s vtable["<<index<<"]";
 cout<<": 0x"<<(void*)pAddr[index]<<endl;
}

//使用示例:
class Base{
 int i;
public:
 virtual void f1(){
  cout<<"Base's f1()"<<endl;
 }
 virtual void f2(){
  cout<<"Base's f2()"<<endl;
 }
};

Base b;
showVtableContent("Base",&b,0); //輸出第一個虛函數(shù)Base::f1的地址
showVtableContent("Base",&b,1); //輸出第二個虛函數(shù)Base::f2的地址

總結

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

參考文獻

[1]print address of virtual member function

[2]動態(tài)聯(lián)編實現(xiàn)原理分析

相關文章

  • C++ DLL實現(xiàn)循環(huán)播放音樂的示例詳解

    C++ DLL實現(xiàn)循環(huán)播放音樂的示例詳解

    這篇文章主要為大家詳細介紹了C++ DLL實現(xiàn)循環(huán)播放音樂的相關知識,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解下
    2024-03-03
  • C++使用chrono庫處理日期和時間的實現(xiàn)方法

    C++使用chrono庫處理日期和時間的實現(xiàn)方法

    C++11 中提供了日期和時間相關的庫 chrono,通過 chrono 庫可以很方便地處理日期和時間,本文主要介紹了C++使用chrono庫處理日期和時間的實現(xiàn)方法,感興趣的小伙伴們可以參考一下
    2021-09-09
  • c/c++ 標準庫 bind 函數(shù)詳解

    c/c++ 標準庫 bind 函數(shù)詳解

    bind是一組用于函數(shù)綁定的模板。在對某個函數(shù)進行綁定時,可以指定部分參數(shù)或全部參數(shù),也可以不指定任何參數(shù),還可以調(diào)整各個參數(shù)間的順序。這篇文章主要介紹了c/c++ 標準庫 bind 函數(shù) ,需要的朋友可以參考下
    2018-09-09
  • C語言求質(zhì)數(shù)的幾種簡單易懂方式

    C語言求質(zhì)數(shù)的幾種簡單易懂方式

    這篇文章主要介紹了C語言求質(zhì)數(shù)的幾種簡單易懂方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C++中std::chrono時間庫的全面解析

    C++中std::chrono時間庫的全面解析

    C++?std::chrono時間庫是C++標準庫提供的一個時間處理庫,提供了一個方便、靈活和精確的時間處理工具,下面小編就帶大家深入了解一下std::chrono時間庫的使用吧
    2023-10-10
  • 基于C語言實現(xiàn)泛型編程詳解

    基于C語言實現(xiàn)泛型編程詳解

    對于C而言,想實現(xiàn)泛型編程并非易事,甚至可以說非常繁瑣,一大堆坑。最主要也沒有現(xiàn)成的輪子可用。本文就來詳細為大家講講C語言如何實現(xiàn)泛型編程詳解,需要的可以參考一下
    2022-07-07
  • FFmpeg實現(xiàn)變速播放的兩種方法總結

    FFmpeg實現(xiàn)變速播放的兩種方法總結

    這篇文章主要為大家詳細介紹了FFmpeg中實現(xiàn)變速播放的兩種方法,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的可以了解一下
    2023-07-07
  • C++ OpenGL實現(xiàn)三角形的繪制

    C++ OpenGL實現(xiàn)三角形的繪制

    這篇文章主要主要為大家詳細介紹了如何利用C++和OpenGL實現(xiàn)三角形的繪制,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起動手嘗試一下
    2022-06-06
  • win10環(huán)境下vscode Linux C++開發(fā)代碼自動提示配置(基于WSL)

    win10環(huán)境下vscode Linux C++開發(fā)代碼自動提示配置(基于WSL)

    這篇文章主要介紹了win10環(huán)境下vscode Linux C++開發(fā)代碼自動提示配置(基于WSL),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • C語言 聯(lián)合(union)用法案例詳解

    C語言 聯(lián)合(union)用法案例詳解

    這篇文章主要介紹了C語言 聯(lián)合(union)用法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評論