物件指標
1,指向物件的指標
time * pt;
time t1;
pt = &t1;
乙個物件儲存空間的起始位址就是物件的指標,可以定義乙個指標變數,用來存放物件的位址,這就是指向物件的指標變數。
訪問物件成員
pt -> hour;
(*pt).gettime();
2,指向物件成員的指標
(1),指向物件資料成員的指標
int *p1;
p1 = &t1.hour;
cout<<*p1<(2)指向物件成員函式的指標
先複習一下指向普通函式的指標變數的定義方法
void (*p) ();//p是指向void型函式的指標變數
可以使p指向乙個函式,並通過指標變數呼叫函式:
p= fun; //將fun函式的指標入口位址付給了指標變數p,p就指向了函式fun;
(*p)(); //呼叫fun函式
但是不能類似的指向成員函式,如以下是錯誤的
p = t1.gettime();
因為編譯系統要求指標變數的型別必須與賦值號右側額型別相匹配,但指標變數p與類無關,而gettime函式卻屬於time類。
所以應採用下面的方式:
void(time::*p2)();//定義p2為指向time類中公用成員函式的指標變數
注意(time*p2)兩側的括號不能去掉,因為()的優先順序高於*,沒有括號,就變成了
void(time::*(p2()); //這是返回值為void型別指標的函式。
定義指向公用函式的指標變數的一般形式為
資料型別名(類名::指標變數名)(引數列表);
可以讓他指向乙個公用成員函式,
p2 = &time::gettime;
C 物件導向之this指標
從上篇博文,我們已經知道了成員變數與成員函式是分開儲存的,即每乙個非靜態成員函式只會誕生乙份函式例項,也就是多個同型別的物件會共用一塊 那麼這塊 是如何區分哪個物件在呼叫它呢?c 通過this 指標指向呼叫成員函式的物件來解決這個問題。this指標隱含在每個非靜態成員函式內的一種指標。無需定義,直接...
C 之物件陣列與物件指標
是指每乙個陣列元素都是物件的陣列,也就是說,若乙個類有若干個物件,我們把一系列的物件用乙個陣列來存放。物件陣列的元素是物件,不僅具有資料成員,而且還有函式成員。格式 類名 陣列名 下標表示式 在建立陣列時,同樣要呼叫建構函式。有幾個陣列元素就要呼叫幾次建構函式。1 當只需要乙個引數時,在定義物件陣列...
C 學習 物件模型之 this指標
在 c 中,每乙個物件都能通過this指標來訪問自己的位址。this指標是所有成員函式的隱含引數。因此,在成員函式內部,它可以用來指向呼叫物件。this指標針對物件。對於非成員函式,靜態函式和友元函式不能使用this指標,因為他們指標所有物件。this指標只針對某乙個物件。多繼承和多型的this指標...