zz 將成員函式指標強制轉換成void指標

2021-05-22 08:22:27 字數 1058 閱讀 3915

採用取成員函式指標的位址的方法,先把指向成員函式指標的指標強制轉化為別的型別,如unsigned*,當然同樣可以通過此轉化後的指標經過相反的變換來呼叫成員函式。於是乎要轉化為void*的問題也隨之可解,如下示例:

/* vs2003下編譯執行 */

class abstractmethod

public:

virtual void show(){}  // = 0;  // 可以是純虛函式,這裡為了測試方便不使用純虛函式!

void fun()

cout << "i was called!" << endl;

void fun1()

cout << "i was called!" << endl;

int main()

// 定義成員函式指標型別

typedef void (abstractmethod::*mfp)(void);

// 轉化函式指標為別的指標

mfp mfp1 = &abstractmethod::show;  

unsigned* tmp =  (unsigned*)&mfp1;

cout << hex << *tmp << endl;

mfp mfp2 = &abstractmethod::fun;

tmp = (unsigned*)&mfp2;

cout << hex << *tmp << endl;

mfp mfp3 = &abstractmethod::fun1;

tmp = (unsigned*)&mfp3;

cout << hex << *tmp << endl;

// 通過轉化後的指標呼叫成員函式

abstractmethod am;

mfp* addr = (mfp*)tmp;

(am.*mfp3)();

(am.*(*addr))();

return 0;

1. 在除錯是檢視臨時變數函式指標的值和輸出的是否一樣。

2. 可以根據除錯時的反彙編進行結果驗證。

3. 最好的辦法就是如上例子通過轉化後的指標來呼叫成員函式。

成員變數 函式指標的用法zz

說明 這是今天看 thinking in c 的第10章時作的 筆記 前面也有人 問到關於成員函式指標的問題,我那時說直接傳入this指標,現在看 了書後有多了一種方法,不過,它的語法有點難計。這下回去可以看看mfc的訊息對映 動態建立是怎麼寫的了,我想也應 該是成員函式指標把 指標是指向一些記憶體...

指標強制轉換

c 和 c 的指標強制轉換時不太一樣的,c 提供了4中型別,用於更加精細化控制指標的強制轉換。1 指標轉換原理 討論指標的強制轉換之前,我們先要理解清楚指標的根本含義。最通俗的解釋,指標即是位址,但是,指標絕不僅僅只是位址。1 指標存著所指物件位址 2 指標存著所指物件的型別和型別大小 試想我們定義...

指標強制轉換

指標強制轉換在指令變數賦值上,只是編譯器的乙個善意的提醒,在組合語言中,和不加強制轉換的指令時一樣的,並沒有多產生指令。強制轉換後的影響不是在轉換的時候發生,而是在用轉換後的身份去訪問記憶體時體現到了指令中。例子 6 int i globle variable 7 int pi globle var...