說實在的,我只是想寫寫鞏固鞏固而已,其實這方面的資料,別人已經分析的很詳細啦。哈哈
俺只是把**貼出來,知道怎麼用而已,若真要知道其原理或推理過程,請參看下面的參考鏈結哦。
普通函式指標和類成員函式指標
舉例:
#include "stdafx.h"
#include using namespace std;
void getnamebyid(int iid)
void getagebyid(int iid)
typedef void(*pfun1)(int);
void main()
需要注意的是普通成員函式指標可以單獨使用,而類成員函式指標不能單獨使用,需要結合類物件使用。
舉例:
#include "stdafx.h"
#include using namespace std;
class cstudent
void getagebyid(int iid)
};typedef void(cstudent::*pfun1)(int);
void main()
類成員函式的函式位址與類的位址的偏移量是固定不變的,其物件和物件的函式位址的偏移位址也是固定不變的,並且其兩者相同。只要給出了型別物件,無論是指標和引用,都不會因為是否銷毀而導致函式呼叫失敗。但是有成員變數,這樣就是玩火了。
舉例:
#include "stdafx.h"
#include using namespace std;
class cstudent
void getagebyid(int iid)
};typedef void(cstudent::*pfun1)(int);
void main()
在delete pstudent指標後,pstudent任然可以成功呼叫getnamebyid和getagebyid。
舉例:
#include "stdafx.h"
#include using namespace std;
class cstudent
void getnamebyid(int iid)
void getagebyid(int iid)
private:
lpstr m_name;
};typedef void(cstudent::*pfun1)(int);
void main()
在delete pstudent指標後,pstudent呼叫getnamebyid會引起崩潰。因為delete之後,其成員變數已析構,變數的位址在空,當再次訪問空位址的變數時,就會引起訪問違規(0xc0000005: access violation reading location 0x00000000.),但是訪問getagebyid依然可以正常訪問哦。
是不是有點感覺啦,哈哈。
寫寫blog,真好,可以讓自己加深理解,同時還可以作為備份,真地感覺很棒啊。
【參考】
深入理解成員函式指標
include includeusing namespace std class test test void hello private int m i int main hello hello 為何 p null p hello 這樣之後,null hello 也依然有效呢?include in...
深入理解資料成員指標 函式成員指標
對於普通指標變數來說,其值是它所指向的位址,0表示空指標。而對於資料成員指標變數來說,其值是資料成員所在位址相對於物件起始位址的偏移值,空指標用 1表示。例 示例 struct x define value of ptr p long p int main 函式成員指標與普通函式指標相比,其size...
C C 雜記 深入理解資料成員指標 函式成員指標
對於普通指標變數來說,其值是它所指向的位址,0表示空指標。而對於資料成員指標變數來說,其值是資料成員所在位址相對於物件起始位址的偏移值,空指標用 1表示。例 示例 struct x define value of ptr p long p intmain view code 函式成員指標與普通函式指...