重學C (2) 指向類成員的指標

2021-04-01 22:28:17 字數 1042 閱讀 4122

指向類成員的指標,印象中似乎很少用到,重新學習c++的過程中,才發現自己是忽視了乙個很重要的東東,以前我一直認為類的成員函式不能作為**函式,所以很多c程式都始終無法移植到c++上來,現在才知道,這是對指向類成員的指標不了解的緣故。

1、指向非靜態成員的指標

其實指向非靜態的類成員的指標很容易,它們與普通指標唯一的區別是,他們受類的限制。如下:

class a

;int (a::*p_val) = &a::_val;

int ( a::*p_func )() = &a::val;

看到了嗎,是的,和普通的指標的區別是,指向類成員的指標必須把類也一併帶上,上面的例子中就是要把a::這個限定符一起戴上,然後?用法和普通指標一樣的就是了。

2、指向靜態成員的指標

指向靜態成員的指標,宣告的方式和普通指標完全一樣,只是賦值的時候,還得加上類的限定符。為什麼這樣?我想可以這樣來理解,對於非靜態成員,其存在取決於類,類消亡的時候,非靜態成員隨之消亡,所以,其宣告必須與類的限定符綁在一起,而靜態成員對於類而言並無依附關係,所以,不需要類的限定符。如下:

class a

;int *p_val = &a::_val;

int (*p_func) = &a::val;

3、好處:

乙個好處是,通過指向成員的函式指標,可以很輕鬆的呼叫各個成員函式了,另乙個好處是,對於靜態成員函式,可以成為c裡的**函式啦。

下面是乙個例子,加深一下理解:

#include

#include

using namespace std;

typedef void (*funchandler)();

void register_func(funchandler f)

class a

void test()

void test1()

void test2()

int val()

static void test3()

int _val;

private:

};int main()

13 6指向類成員的指標

1.普通函式指標不能付給類的成員函式 要用類指標呼叫類成員函式 不能滿足三個條件1引數2返回值3他的類 2類成員指標 定義 指向值的型別 類名 指標名 short screen ps screen screen height 3類成員函式的指標 定義 返回值型別 類名 指標名 引數列表 int sc...

惱人的函式指標(二) 指向類成員的指標

前面曾寫過一篇惱人的函式指標 一 總結了普通函式指標的宣告 定義以及呼叫,還有函式指標陣列,函式指標用作返回值等。但是作為c 的研讀,我發現我漏掉了乙個最重要的內容,就是指向類成員的指標,這裡將做相應補充 相關 測試環境為vs 2010 指向類成員的指標總的來講可以分為兩大類四小類 指向資料成員還是...

C 指標2 指向陣列的指標和指標陣列

7.4指向陣列元素的指標 宣告與賦值 例 int a 10 pa pa a 0 或 pa a p1 通過指標引用陣列元素,經過上述宣告及賦值後 pa就是a 0 pa 1 就是a 1 pa i 就是a i a i pa i a i pa i 都是等效的。不能寫 a 不能給陣列名賦值或者試圖改變其值,因...