C 指向類的成員的指標

2021-10-02 11:54:25 字數 2444 閱讀 2223

想必接觸過c的朋友們對c語言中指標的概念已經有了深入的了解(如果初步進行了解的朋友可以看一下**c語言基礎學習筆記**)。指標展開來講的基本知識點包括:指標的概念、指標的定義和初始化及簡單使用、指標函式和函式指標(有關指標函式和函式指標的內容上面的鏈結中也有介紹)。

不得不說,c++作為c語言的擴充套件,在物件導向這一主體部分處處體現著指標的思想,好比:指標和引用。之所以這麼說,是因為在我的理解:引用也可以從指標的角度進行理解,雖然系統不會為其分配記憶體,並且一經定義和初始化後再不能修改,但是本質上,引用也是在對引用物件的位址進行訪問(引用和引用的物件共用同一位址),並且可以對儲存的值進行修改。(更加詳細的介紹可以參見**指標和引用**)

下面進入正題,今天想跟大家分享的內容當然也和指標有關,具體應用在c++的物件導向:對類的成員訪問這一塊內容中——用指標來實現訪問類的資料成員和成員函式。看到這裡,可能很多朋友以為下面的內容沒多大意義,因為對於類的成員的訪問,我們可以定義乙個普通物件,通過物件.成員的形式進行訪問,或者是物件指標->類的成員的方式訪問豈不是很舒服?

非要給乙個理由的話,可能僅僅是因為我覺得這部分很有意思。

說了一大堆廢話,這裡開始正式進入正文。

在c中,我們已經了解過指標的基本使用,這裡不再贅述,值得一提的是c中的函式指標。當我們進入c++環節,通過作用域運算子對這兩者的使用範圍加以限定時,就變成了這裡要加以介紹的「指向類的成員的指標」,我以為這一點應當成為我們的共識,因為它在接下來的論述中極其重要。

**型別名 類名::*指標名=&類名::資料成員(成員變數)名**

可以舉個簡單的,假設我們已經定義了乙個類data,含有**公有資料成員day,型別為int**(一定要記得是**公有**,這一點很重要),下面進行定義:**int data::*a=&data::day;**。現在已經定義好了,我們可以清晰的看到,所謂的「指向類的資料成員的指標」不過是對普通指標進行「加工」,即:**通過作用域運算子將資料範圍限制到類的內部,通過類名取得公有的資料成員指標【位址】,將其賦值給乙個同型別指標。**(看到這裡,想必不少朋友已經明白,為什麼是公有資料成員才可以,因為通過類名來訪問類的成員時,只能訪問到公有的)。 再簡單點說,我們將其簡化為c語言版本的:**int *a=&day;**

下面上**:

#ifndef _birthday_h

#define _birthday_h

#include

#include

"point.h"

//birthday類的定義

class

birthday

;#endif

#include

#include

#include

"birthday.h"

intmain

(int argu,

char

*ar**)

結果截圖:

通過對結果進行分析,我們可以得到另乙個結論:

以該種方式定義的指標,是乙個廣義上的指標,即:公用指標,所有的類的物件都可以使用該指標指向各自所在儲存區域塊內部的指定成員。

需要注意的是:由於不同物件在初始化時系統會為其分配不同的儲存區域,因此,不同物件呼叫該指標獲取的資料成員的值不同,並且不同物件通過該指針對指定公有資料成員的值進行修改,對其他的物件對應的資料成員的值無任何影響。

**型別名 (類名::*指標名)(參數列)=&類名::成員函式名**

假設data類含有公有成員數getdata,返回值型別為int,下面進行定義:**int (data::*ptr)(int a,int b)=&data::getdata();**本質上是將函式指標的應用範圍限制到「類的內部」這個範圍。將其定義進行簡化:**int (*ptr)(int a,int b)=&getdata();**,即為c中普通的函式指標。 下面上**:

//說明:對應標頭檔案同上birthday.h

#include

#include

#include

"birthday.h"

intmain

(int argu,

char

*ar**)

結果截圖:

好了,分享到這裡就結束了,還是感覺c的學習對深層次理解c++有很大的幫助作用。

同樣我作為乙個c/c++的初學者,有以上什麼不對的地方希望大家多多指正,我靜聽教誨,謝謝大家!

指向類成員的指標

一 指向類的普通成員的指標 非靜態 1 指向類成員函式的指標 簡單的講,指向類成員函式的指標與普通函式指標的區別在於,前者不僅要匹配函式的引數型別和個數以及返回值型別,還要匹配該函式指標所屬的類型別。總結一下,比較以下幾點 a 引數型別和個數 b 返回值型別 c 所屬的類型別 特別之處 究其原因,是...

指向類成員的指標

前面曾寫過一篇惱人的函式指標 一 總結了普通函式指標的宣告 定義以及呼叫,還有函式指標陣列,函式指標用作返回值等。但是作為c 的研讀,我發現我漏掉了乙個最重要的內容,就是指向類成員的指標,這裡將做相應補充 相關 測試環境為vs 2010 指向類成員的指標總的來講可以分為兩大類四小類 指向資料成員還是...

指向類成員的指標

在c 語言中,可以定義乙個指標,使其指向類成員或成員函式,然後通過指標來訪問類的成員。這包括指向屬性成員的指標和指向成員函式的指標。指向非靜態資料成員的指標在定義時必須和類相關聯,在使用時必須和具體的物件關聯。由於類不是執行時存在的物件。因此,在使用這類指標時,需要首先指定類的乙個物件,然後,通過物...