如何理解成員函式指標

2021-09-30 11:43:29 字數 1600 閱讀 8880

說實在的,我只是想寫寫鞏固鞏固而已,其實這方面的資料,別人已經分析的很詳細啦。哈哈

俺只是把**貼出來,知道怎麼用而已,若真要知道其原理或推理過程,請參看下面的參考鏈結哦。

普通函式指標和類成員函式指標

舉例:

#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 函式成員指標與普通函式指...