中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中類的this指針怎么使用

發布時間:2022-03-01 16:26:54 來源:億速云 閱讀:121 作者:iii 欄目:開發技術

這篇“C++中類的this指針怎么使用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“C++中類的this指針怎么使用”文章吧。

    c++的類中,非靜態的成員函數都有一個隱藏的this指針,在函數體中所以的成員變量都是通過this指針來訪問的。但是this指針是對用戶是透明的,用戶不需要顯示的給this指針傳參,編譯時會自動接收參數。

    ,this指針的注意點

    • 調用成員函數時,不可以顯示給this指針傳參

    • 定義成員函數時,不能顯示的聲明this指針

    • 在成員函數內部,可以顯示的使用this指針

    用一個日期類,來講述this指針的注意點:

    class Date
    {
     public:
     void Print()
     {
      cout<<_year<<"/"<<_month<<"/"<<_day<<endl;
     }
     Date (int year,int month,int day)
     {
      _year=year;
      _month=month;
      _day=day;
     ]
     private:
     int _year;
     int _month;
     int _day;
    }

    以上就是一個日期類了,在類里面我定義了一個成員函數Print,這里要講一下,在類中定義一個成員函數可能會被看成內聯函數,想這么簡單一個Print 函數一般是會別看成內聯函數的。

    其實這個成員函數還可以寫成這樣:

    void Print()
    {
     cout<<this->_year<<"/"<<this->_month<<"/"<<this->day<<endl;
    }

    這樣寫有點畫蛇添足的感覺,但是方便大家看,在成員函數中每個成員變量的訪問都里離不開this指針。這個this指針隱藏在函數形參的頭一位,也就是Print(Date * this)。

    比如我要調用這個成員函數:

    int main()
    {
     Date s1(2022,2,28);
     Date s2(2022,3,1);
     s1.Print();
     s2.Print();
    }

    運行結果如下:

    C++中類的this指針怎么使用

    可以看到,調用結果是符合預期的,Print函數中是利用this指針來區分對象的。

    錯誤用例:

    (1)

    int main()
    {
     Date s1(2022,2,28);
     s1.Print(&s1);
    }

    不可以顯示的給this指針傳參,雖然我們知道this指針存在,但是我們不可以給this指針傳參,就當潛規則吧。

    (2)

    void Date::Print(Date* this);

    成員函數的聲明以及定義都不能有this指針,這樣做不行的,可以想想設計者的初心,他是嫌棄老是傳地址麻煩,所以搞了一個隱藏的this指針,你再給函數傳參或者定義函數時給this指針,不是多此一舉嘛。

    二,this指針存在哪里

    this指針是成員函數第一個隱藏的指針形參,一般存在棧中。但是也是由編譯器決定的,有的就存在寄存器中。

    三,this指針的面試坑題

    class A
    { 
    public:
     void PrintA() 
     {
     cout<<_a<<endl;
     }
     void Show()
     {
     cout<<"Show()"<<endl;
     }
    private:
     int _a;
    };
    int main()
    {
     A* p = nullptr;
     p->PrintA(); 
     p->Show();
     }

    問:以上程序可以運行嘛?會崩潰嘛?崩潰在哪里?

    C++中類的this指針怎么使用

    這是對空指針解引用導致的內存問題,所以程序崩潰了,this指針可以為空,但是不能對空指針解引用,函數PrintA中,cout<<_a<;可以寫成cout<< this -> _a<; 講到這大家應該懂了。

    還有一點那么Show函數有問題嘛?沒問題,因為不存在對this的解引用。

    我們將PrintA函數屏蔽掉,看運行結果:

    C++中類的this指針怎么使用

    以上就是關于“C++中類的this指針怎么使用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    江安县| 沙洋县| 余庆县| 沈阳市| 白城市| 龙游县| 漾濞| 奎屯市| 都江堰市| 绥江县| 蒲江县| 新乡市| 东阿县| 洪洞县| 盐山县| 泗阳县| 旺苍县| 闻喜县| 崇左市| 博罗县| 铁岭市| 新安县| 安丘市| 二连浩特市| 茶陵县| 南投市| 靖宇县| 高淳县| 南京市| 常熟市| 曲阳县| 寻乌县| 三河市| 临漳县| 澎湖县| 八宿县| 沈丘县| 安新县| 金沙县| 阜南县| 唐山市|