指向成員的指標運算子 與 的區別

2021-09-01 02:44:47 字數 2021 閱讀 7045

目錄

指向成員的指標運算子 .*  與 ->*  的區別

[1]  成員指標訪問運算子 .*

[2]  成員指標訪問運算子 ->*

執行結果:

其中補充說明一點:

總結:先來乙個類student,注意其中將要表演的fun()函式要是共有的,不然後面不能夠進行訪問(私有成員函式的話!!!)。

class student

;int student::fun()

student::student()

student::~student()

然後接下來我們該怎麼使用這個符號呢?(知道一說起來指標,就會有很多的人是柑橘到頭疼的,這裡可以參考我前一篇關於指標詳解的一篇二維陣列、指標詳解,如果這一篇理解,那麼對於這麼加深理解就會變得很容易。關鍵在於弄清楚指標和陣列對應的相應是幾級指標對應幾維陣列)

使用規則:(類的具體物件

.*類的函式指標)( )

首先分別定義student的物件student和指向類的公有成員函式指標p;然後呼叫,得到結果

student student;

int (student::*p)() = &student::fun;

(student.*p)();

我們還是沿用上面乙個例子的類和物件,然後我們需要在使用的時候做乙個改變,

使用規則:(類的具體物件的指標

.*類的函式指標)( )

首先分別定義student的物件的student的指標pt和指向類的公有成員函式指標p;然後呼叫,得到結果

student student;

student *pt = &student;

int (student::*p)() = &student::fun;

(pt->*p)();

自己寫了呼叫的成員函式的三種方法,其中顯而易見的區分了 .*  與 ->*  的區別,心急的可以直接逃過看最後的結論部分,不過還是建議自己是動手寫一下。

使用類的成員函式指標進行賦值時候,一定要叫上&,否則報錯誤,這裡並不是說它錯了,而是說它這樣子可能不規範。有的編譯器不會通過,比如vs2015

所以說書上的也需要自己動手確定實踐,另外就是書寫規範,會幫助我們避免很多錯誤。另外突然發現這兩個符號在msdn上面居然有說明,啊啊啊啊啊啊。傳送門這兩個符號大二初學習時候一直不明白,但是現在大四回過頭來看,竟然是如此的簡單,可能一次不理解的,多看幾次就會理解。

指向成員的指標運算子(.* 和 –>*)返回表示式左側上指定的物件的特定類成員的值。右側必須指定該類的成員。

二元運算子 .* 將其第一運算元(必須是類型別的物件)與其第二運算元(必須是指向成員的指標型別)組合在一起。

二元運算子 –>* 將其第一運算元(必須是指向類型別的物件的指標)與其第二運算元(必須是指向成員的指標型別)組合在一起。

在包含 .* 運算子的表示式中,第一運算元必須是類型別且可訪問,而指向第二運算元中指定的成員的指標或可訪問型別的成員的指標明確從該類派生並且可供該類訪問。

在包含 –>* 運算子的表達方式中,第一運算元必須是第二運算元中指定的型別的「指向類型別的指標」或明確地從該類派生的型別。

成員運算子 與指標運算子 的區別

在間接引用的時候,例如指標 p 就用p member如果是直接引用或者類本身或者內部引用就用.比如classa.member 或classtype copyconstructor classtype classa 要確定是用 還是用 必須先確定它前面的是乙個物件還是乙個物件指標。a a,p p a ...

關於非成員運算子和成員運算子的區別

運算子的過載一般我們會使用以下兩種形式 成員函式 非成員函式 其實這兩種定義不僅在語法上,在語義上也是有差別的。語法上,定義為成員函式,比如 operator 只接受乙個引數,而非成員函式接受2個引數語義上,這涉及到臨時物件無法繫結到左值引用的問題,比如我們過載operator operator s...

運算子 is與 的區別

is 和 的區別 首先要知道python中物件包含的三個基本要素,分別是 id 身份標識 type 資料型別 和value 值 是python標準操作符中的比較操作符,用來比較判斷兩個物件的value 值 是否相等,例如下面兩個字串間的比較 a cheesezh b cheesezh a b tru...