指向類的成員的指標
在c++中,可以說明指向類的資料成員和成員函式的指標。
指向資料成員的指標格式如下:
《型別說明符》《類名》::*《指標名》
指向成員函式的指標格式如下:
《型別說明符》(《類名》::*《指標名》)(《參數列》)
例如,設有如下乙個類a:
class a
a(int i)
int c;
private:
int a;
};定義乙個指向類a的資料成員c的指標pc,其格式如下:
int a:: *pc = &a::c;
再定義乙個指向類a的成員函式fun的指標pfun,其格式如下:
int (a:: *pfun)(int) = a::fun;
由於類不是執行時存在的物件。因此,在使用這類指標時,需要首先指定a類的乙個物件,然後,通過物件來引用指標所指向的成員。例如,給pc指標所指向的資料成員c賦值8,可以表示如下:
a a;
a.*pc = 8;
其中,運算子.*是用來對指向類成員的指標來操作該類的物件的。
如果使用指向物件的指標來對指向類成員的指標進行操作時,使用運算子->*。例如:
a *p = &a; //a是類a的乙個物件,p是指向物件a的指標。
p ->* pc = 8;
讓我們再看看指向一般函式的指標的定義格式:
《型別說明符》*《指向函式指標名》(《參數列》)
關於給指向函式的指標賦值的格式如下:
《指向函式的指標名》=《函式名》
關於在程式
中,使用指向函式的指標呼叫函式的格式如下:
(*《指向函式的指標名》)(《實參表》)
如果是指向類的成員函式的指標還應加上相應的物件名和物件成員運算子。
下面給出乙個使用指向類成員指標的例子:
#include
class a
int fun(int b)
int c;
private:
int a;
};void main()
m(int i, int j)
void copy(m *m);
void setxy(int i, int j)
void print()
void fun(m m1, m *m2);
void main()
void fun(m m1, m *m2)
輸出結果為:
5,722,25
從輸出結果可以看出,當在被呼叫函式fun中,改變了物件的資料成員值[m1.setxy(12, 15)]和指向物件指標的資料成員值[m2->setxy(22, 25)]以後,可以看到只有指向物件指標作引數所指向的物件被改變了,而另乙個物件作引數,形參物件值改變了,可實參物件值並沒有改變。因此輸出上述結果。
2. 物件引用作函式引數
在實際中,使用物件引用作函式引數要比使用物件指標作函式更普遍,這是因為使用物件引用作函式引數具有用物件指標作函式引數的優點,而用物件引用作函式引數將更簡單,更直接。所以,在c++程式設計中,人們喜歡用物件引用作函式引數。現舉一例子說明物件引用作函式引數的格式。
#include
class m
m(int i, int j)
void copy(m &m);
void setxy(int i, int j)
void print()
a(int i, int j)
void copy(a &aa); //物件引用作函式引數
void print()
void main()
執行結果:
3, 4
指向類成員的指標
一 指向類的普通成員的指標 非靜態 1 指向類成員函式的指標 簡單的講,指向類成員函式的指標與普通函式指標的區別在於,前者不僅要匹配函式的引數型別和個數以及返回值型別,還要匹配該函式指標所屬的類型別。總結一下,比較以下幾點 a 引數型別和個數 b 返回值型別 c 所屬的類型別 特別之處 究其原因,是...
指向類成員的指標
前面曾寫過一篇惱人的函式指標 一 總結了普通函式指標的宣告 定義以及呼叫,還有函式指標陣列,函式指標用作返回值等。但是作為c 的研讀,我發現我漏掉了乙個最重要的內容,就是指向類成員的指標,這裡將做相應補充 相關 測試環境為vs 2010 指向類成員的指標總的來講可以分為兩大類四小類 指向資料成員還是...
指向類成員的指標
在c 語言中,可以定義乙個指標,使其指向類成員或成員函式,然後通過指標來訪問類的成員。這包括指向屬性成員的指標和指向成員函式的指標。指向非靜態資料成員的指標在定義時必須和類相關聯,在使用時必須和具體的物件關聯。由於類不是執行時存在的物件。因此,在使用這類指標時,需要首先指定類的乙個物件,然後,通過物...