欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中點(diǎn)操作符和箭頭操作符的使用詳解

 更新時(shí)間:2013年05月03日 10:58:04   作者:  
本篇文章介紹了,C++中點(diǎn)操作符和箭頭操作符的使用詳解。需要的朋友參考下

區(qū)別

C++中對于類來說,對于其中的成員,用點(diǎn)操作符.來獲得,

而對于一個(gè)指向類對象的指針來說,則用箭頭操作符->調(diào)用該指針?biāo)赶驅(qū)ο蟮某蓡T。

當(dāng)類定義->重載操作符后,則既可以用箭頭操作符,也可以用點(diǎn)操作符。

重載->操作符

重載箭頭操作符必須定義為類成員函數(shù)。沒有顯式形參(而且是類成員,唯一隱式形參是this)。->的右操作數(shù)不是表達(dá)式,而是對應(yīng)類成員的一個(gè)標(biāo)識符,由編譯器處理獲取成員工作。

重載箭頭操作符必須返回指向類類型的指針,或者返回定義了自己的箭頭操作符的類類型對象。

如果返回類型是指針,則內(nèi)置箭頭操作符可用于該指針,編譯器對該指針解引用并從結(jié)果對象獲取指定成員。如果被指向的類型沒有定義那個(gè)成員,則編譯器產(chǎn)生一個(gè)錯(cuò)誤。
如果返回類型是類類型的其他對象(或是這種對象的引用),則將遞歸應(yīng)用該操作符。編譯器檢查返回對象所屬類型是否具有成員箭頭,如果有,就應(yīng)用那個(gè)操作符;否則,編譯器產(chǎn)生一個(gè)錯(cuò)誤。這個(gè)過程繼續(xù)下去,直到返回一個(gè)指向帶有指定成員的的對象的指針,或者返回某些其他值,在后一種情況下,代碼出錯(cuò)。

代碼分析:

下面給出代碼,加深理解。

復(fù)制代碼 代碼如下:

#include <iostream>

 using namespace std;

 class A{
 public:
     void action()
     {
         cout<<"action in class A!"<<endl;
     }
 };

 class B{
         //A a;  
 public: 
     A a;
     A* operator->(){  
         return &a;  
     }  
     void action(){  
         cout << "Action in class B!" << endl;  
     }
 };

 class C{

 public:  
     B operator->(){  
         return b;  
     }  
     void action(){  
         cout << "Action in class C!" << endl;  
     }
 };

 int main()  
 {  
     C* pc = new C;  
     pc->action();  
     C c;  
     c->action();   
     return 0;  
 }

上面代碼輸出結(jié)果是:
Action in class C!
Action in class A!

對于代碼

復(fù)制代碼 代碼如下:

    C* pc = new C;
    pc->action();


輸出的結(jié)果是:Action in class C!
這是因?yàn)閜c是類對象指針,此時(shí)的箭頭操作符使用的是內(nèi)置含義,對pc解引用然后調(diào)用對象的成員函數(shù)action。

對于代碼:

復(fù)制代碼 代碼如下:

    C c;
    c->action();


可以這樣理解:

c是對象,c后面的箭頭操作符使用的是重載箭頭操作符,即調(diào)用類C的operator->()成員函數(shù)。此時(shí)返回的是類B的對象,所以調(diào)用類B的operator->()成員函數(shù),B的operator->()返回的是指針,所以現(xiàn)在可以使用內(nèi)置箭頭操作符了。對B的operator->()返回的指針進(jìn)行解引用,然后調(diào)用解引用后的對象的成員函數(shù)action,此時(shí)調(diào)用的就是類A的action()。這里存在一個(gè)遞歸調(diào)用operator->()的過程,最后再使用一次內(nèi)置含義的箭頭操作符。

相關(guān)文章

  • 深入了解c++11 移動語義與右值引用

    深入了解c++11 移動語義與右值引用

    這篇文章主要介紹了c++ 移動語義與右值引用的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • VC++實(shí)現(xiàn)通過API來查看程序錯(cuò)誤信息的方法

    VC++實(shí)現(xiàn)通過API來查看程序錯(cuò)誤信息的方法

    這篇文章主要介紹了VC++實(shí)現(xiàn)通過API來查看程序錯(cuò)誤信息的方法,非常實(shí)用的功能,需要的朋友可以參考下
    2014-08-08
  • c#中實(shí)現(xiàn)退出程序后自動重新啟動程序的方法

    c#中實(shí)現(xiàn)退出程序后自動重新啟動程序的方法

    下面小編就為大家?guī)硪黄猚#中實(shí)現(xiàn)退出程序后自動重新啟動程序的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • 整型數(shù)據(jù)在內(nèi)存中存儲方式的講解

    整型數(shù)據(jù)在內(nèi)存中存儲方式的講解

    今天小編就為大家分享一篇關(guān)于整型數(shù)據(jù)在內(nèi)存中存儲方式的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • C語言簡明講解快速排序的應(yīng)用

    C語言簡明講解快速排序的應(yīng)用

    快速排序由于排序效率在同為O(N*logN)的幾種排序方法中效率較高,因此經(jīng)常被采用,再加上快速排序思想----分治法也確實(shí)實(shí)用,因此很多軟件公司的筆試面試,包括像騰訊,微軟等知名IT公司都喜歡考這個(gè),還有大大小的程序方面的考試如軟考,考研中也常常出現(xiàn)快速排序的身影
    2022-05-05
  • 淺析C語言中的內(nèi)存布局

    淺析C語言中的內(nèi)存布局

    以下是對C語言中的內(nèi)存布局進(jìn)行了詳細(xì)的分析介紹。需要的朋友可以過來參考下
    2013-08-08
  • 淺談C++11中的幾種鎖

    淺談C++11中的幾種鎖

    本文主要介紹了C++11中的幾種鎖,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++如何用數(shù)組模擬鏈表

    C++如何用數(shù)組模擬鏈表

    大家好,本篇文章主要講的是C++如何用數(shù)組模擬鏈表,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • 詳解C++中對構(gòu)造函數(shù)和賦值運(yùn)算符的復(fù)制和移動操作

    詳解C++中對構(gòu)造函數(shù)和賦值運(yùn)算符的復(fù)制和移動操作

    這篇文章主要介紹了C++中對構(gòu)造函數(shù)和賦值運(yùn)算符的復(fù)制和移動,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-01-01
  • 關(guān)于c語言的一個(gè)小bug詳解

    關(guān)于c語言的一個(gè)小bug詳解

    以下是對c語言中的一個(gè)小bug進(jìn)行了詳細(xì)的分析介紹。需要的朋友可以過來參考下
    2013-08-08

最新評論