13.1.9 指向類成員的指標
在c++語言中,可以定義乙個指標,使其指向類成員或成員函式,然後通過指標來訪問類的成員。這包括指向屬性成員的指標和指向成員函式的指標。
1.指向資料成員的指標
在c++語言中,可以定義乙個指標,使其指向類成員。當屬性成員為靜態和非靜態時,指標的使用也有不同。其中,指向非靜態資料成員的指標定義格式如下:
1. 《資料型別
><
類名》::*<
指標名》[=&<
類名》::<
非靜態資料成員
>]
指向非靜態資料成員的指標在定義時必須和類相關聯,在使用時必須和具體的物件關聯。
1. 《類物件名
>.*<
指向非靜態資料成員的指標
>
指向靜態資料成員的指標的定義和使用與普通指標相同,在定義時無須和類相關聯,在使用時也無須和具體的物件相關聯。
【示例13-14】 假設已經定義了乙個類student,該類有非靜態成員math,靜態成員chin-ese,**演示了指向它們的指標定義方式。
1. student s1;
2. int student::*pm=&student::math;
//指向非靜態屬性
3. s1.*pm=100; //設定非靜態屬性
4. int *pc=&student::chinese; //指向靜態屬性
5. *pc=10; //設定靜態屬性
分析:該示例定義了指標pc和pm,分別指向類的靜態資料成員chinese和非靜態資料成員math。訪問pm時,必須使用類例項來修飾。而訪問pc時,與普通指標沒有區別。
2.指向成員函式的指標
定義乙個指向非靜態成員函式的指標必須在三個方面與其指向的成員函式保持一致:引數列表要相同、返回型別要相同、所屬的型別要相同。定義格式如下:
1. 《資料型別
>(<
類名》::*<
指標名》)(<
引數列表
>)[=&<
類名》::<
非靜態成員函式
>]
使用指向非靜態成員函式的指標的方法和使用指向非靜態資料成員的指標的方法相同,格式如下:
1. (《類物件名
>.*<
指向非靜態成員函式的指標
>)(<
引數列表
>);
指向靜態成員函式的指標和普通指標相同,在定義時無須和類相關聯,在使用時也無須和具體的物件相關聯。
1. 《資料型別
>(*<
指標名》)(<
引數列表
>)[=&<
類名》::<
靜態成員函式
>]
【示例13-15】 假設類student有非靜態成員函式f1,非靜態成員函式f2,**演示指向它們的函式指標的定義方式。
1. student s1;
2. float (student::*pf1)()=&student::f1; //指向非靜態成員函式的指標
3. (s1.*pf1)(); //呼叫指向非靜態成員函式的指標
4. void (*pf2)()=&student::f2; //指向靜態成員函式的指標
5. pf2(); //呼叫靜態成員函式
分析:指向非靜態成員函式時,必須用類名作限定符,使用時則必須用類的例項作限定符。指向靜態成員函式時,則不需要使用類名作限定符。
指向類成員的指標
一 指向類的普通成員的指標 非靜態 1 指向類成員函式的指標 簡單的講,指向類成員函式的指標與普通函式指標的區別在於,前者不僅要匹配函式的引數型別和個數以及返回值型別,還要匹配該函式指標所屬的類型別。總結一下,比較以下幾點 a 引數型別和個數 b 返回值型別 c 所屬的類型別 特別之處 究其原因,是...
指向類成員的指標
前面曾寫過一篇惱人的函式指標 一 總結了普通函式指標的宣告 定義以及呼叫,還有函式指標陣列,函式指標用作返回值等。但是作為c 的研讀,我發現我漏掉了乙個最重要的內容,就是指向類成員的指標,這裡將做相應補充 相關 測試環境為vs 2010 指向類成員的指標總的來講可以分為兩大類四小類 指向資料成員還是...
指向類成員的指標
在c 語言中,可以定義乙個指標,使其指向類成員或成員函式,然後通過指標來訪問類的成員。這包括指向屬性成員的指標和指向成員函式的指標。指向非靜態資料成員的指標在定義時必須和類相關聯,在使用時必須和具體的物件關聯。由於類不是執行時存在的物件。因此,在使用這類指標時,需要首先指定類的乙個物件,然後,通過物...