C 中的物件指標和物件引用

2021-06-16 05:33:41 字數 1830 閱讀 4239

在c++中,可以說明指向類的資料成員和成員函式的指標。

指向資料成員的指標格式如下:

《型別說明符》《類名》::*《指標名》

指向成員函式的指標格式如下:

《型別說明符》(《類名》::*《指標名》)(《參數列》)

例如,設有如下乙個類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;

讓我們再看看指向一般函式的指標的定義格式:

《型別說明符》*《指向函式指標名》(《參數列》)

關於給指向函式的指標賦值的格式如下:

《指向函式的指標名》=《函式名》

關於在程式中,使用指向函式的指標呼叫函式的格式如下:

(*《指向函式的指標名》)(《實參表》)

如果是指向類的成員函式的指標還應加上相應的物件名和物件成員運算子。

下面給出乙個使用指向類成員指標的例子:

以上程式定義了好幾個指標,雖然它們都是指標,但是所指向的物件是不同的。p是指向類的物件;pc是指向類的資料成員;pfun是指向類的成員函式。因此它們的值也是不相同的。

物件指標和物件引用作函式的引數

1. 物件指標作函式的引數

使用物件指標作為函式引數要經使用物件作函式引數更普遍一些。因為使用物件指標作函式引數有如下兩點好處:

(1) 實現傳址呼叫。可在被呼叫函式中改變呼叫函式的引數物件的值,實現函式之間的資訊傳遞。

(2) 使用物件指標實參僅將物件的位址值傳給形參,而不進行副本的拷貝,這樣可以提高執行效率,減少時空開銷。

當形參是指向物件指標時,呼叫函式的對應實參應該是某個物件的位址值,一般使用&後加物件名。下面舉一例子說明物件指標作函式引數。

輸出結果為:

5,722,25

從輸出結果可以看出,當在被呼叫函式fun中,改變了物件的資料成員值[m1.setxy(12, 15)]和指向物件指標的資料成員值[m2->setxy(22, 25)]以後,可以看到只有指向物件指標作引數所指向的物件被改變了,而另乙個物件作引數,形參物件值改變了,可實參物件值並沒有改變。因此輸出上述結果。

2. 物件引用作函式引數

在實際中,使用物件引用作函式引數要比使用物件指標作函式更普遍,這是因為使用物件引用作函式引數具有用物件指標作函式引數的優點,而用物件引用作函式引數將更簡單,更直接。所以,在c++程式設計中,人們喜歡用物件引用作函式引數。現舉一例子說明物件引用作函式引數的格式。

該例子與上面的例子輸出相同的結果,只是呼叫時的引數不一樣。

this指標

this指標是乙個隱含於每乙個成員函式中的特殊指標。它是乙個指向正在被該成員函式操作的物件,也就是要操作該成員函式的物件。

當對乙個物件呼叫成員函式時,編譯程式先將物件的位址賦給this指標,然後呼叫成員函式,每次成員函式訪問資料成員時,由隱含作用this指標。而通常不去顯式地使用this指標來引用資料成員。同樣也可以使用*this來標識呼叫該成員函式的物件。下面舉一例子說明this指標的應用。

執行結果:

3, 4

C 物件指標和物件引用

在c 中,可以說明指向類的資料成員和成員函式的指標 1 指向資料成員的指標格式如下 型別說明符 類名 指標名 2 指向成員函式的指標格式如下 型別說明符 類名 指標名 參數列 如下例 class a public int fun int b a int i int c private int a 定...

物件和物件指標以及物件引用的使用

如下程式 include include using namespace std class m 向編譯系統宣告,m類在整個源程式內已經定義 class student void set string str void print class m m類的有參建構函式 m m類的無參建構函式 int ...

c 物件指標,引用的操作

1.time類儲存在 htime.h 中。要求 資料成員包括時 hour 分 minute 秒 second 為私有成員 能給資料成員提供值的成員函式 預設值為0時0分0秒 能分別取時 分 秒。能輸出時 分 秒 用 分隔 並顯示上午 am 或下午 pm 有預設值的建構函式 預設值為0時0分0秒 說明...