C 之物件指標

2021-07-30 05:50:54 字數 915 閱讀 4764

物件指標

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指標...