1、箭頭運算子必須是類的成員函式。解引用運算子一般也應該宣告為類的成員函式,但不是必須。
2、箭頭用算符返回值必須是乙個指標,或者是乙個過載了箭頭運算子的物件。
a)如果返回的是乙個指標將呼叫內建的箭頭運算子。執行相當於(*(p.operator->()).mem;的操作。
b)如果返回是乙個過載了箭頭運算子的物件,則繼續對該物件呼叫其過載了的箭頭運算子,直到返回的是乙個指標,將對該指標呼叫a)的操作。操作相當於(*(p.operator->().operator->())).mem;
總的來說過載的箭頭運算子就是為了改變從哪個物件中獲取成員。
下面是乙個例子,儘管這個例子不是特別有用。
class a
a* operator->()
int geta()
int getb()
private:
int a=0;
int b=1;
};std::ostream& operator<<(std::ostream &os,const a& a)
{ os
C 引用 與 運算子過載
c 中,引用其實還是靠指標實現的 為什麼要引入引用呢?c 之父說,最初是為了實現運算子過載方便,下面舉個例子 例如 c a b是可以接受的寫法,而c a b 就不是很方便而且有歧義了 那麼下面說一下,哪些運算子過載必須用引用呢 運算子,它本身的意義是 自增,並返回自增後的值 所以就要返回自己,而不是...
C 中點運算子和箭頭運算子的區別
ps 需要快速看結論的,直接看文末總結歸納,需要理解的可以從文首開始看。p member執行為p offset member 目標的記憶體位址 s.member變成訪問 s offset member 目標的記憶體位址 因此實際上功能完全一致,看起來 p member更加直接一些,只不過s.memb...
C 過載 和 運算子
流提取運算子 和流插入運算子 注意,我們到目前為止,必須呼叫tostring 函式返回乙個表示rational物件的字串,再把它顯示出來。例如,為了顯示rational 物件r,要編寫一下 形式1 cout r.tostring 而不能直接使用 形式2cout r 但我們平時見到的int doubl...