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

一起來學習C++中類的this指針以使用

 更新時間:2022年03月01日 15:08:00   作者:∞大明白  
這篇文章主要為大家詳細介紹了C++中類的this指針以使用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

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

,this指針的注意點

  • 調用成員函數(shù)時,不可以顯示給this指針傳參
  • 定義成員函數(shù)時,不能顯示的聲明this指針
  • 在成員函數(shù)內部,可以顯示的使用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;
}

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

其實這個成員函數(shù)還可以寫成這樣:

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

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

比如我要調用這個成員函數(shù):

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

運行結果如下:

在這里插入圖片描述

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

錯誤用例:

(1)

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

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

(2)

void Date::Print(Date* this);

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

二,this指針存在哪里

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

三,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();
 }

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

在這里插入圖片描述

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

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

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

在這里插入圖片描述

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!  

相關文章

  • 詳解C++中的萬能頭文件

    詳解C++中的萬能頭文件

    C++萬能頭文件它是一個包含了每一個標準庫的頭文件,接下來通過本文給大家介紹C++中的萬能頭文件及優(yōu)缺點,需要的朋友可以參考下
    2023-02-02
  • 怎樣用cmd運行C程序

    怎樣用cmd運行C程序

    這篇文章主要介紹了怎樣用cmd運行C程序?今天就來和大家分享一下用cmd運行C程序的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • C++ getcwd函數(shù)獲取項目運行路徑方法詳解

    C++ getcwd函數(shù)獲取項目運行路徑方法詳解

    在Linux下做QT項目時,需要獲取項目的運行路徑,于是用getcwd函數(shù)進行獲取,然后在Windows下進行測試,發(fā)現(xiàn)獲取到的是程序的項目路徑,即代碼文件路徑,然后再Linux QT中測試,獲取到的又是運行路徑,這就很納悶了。經(jīng)過再三測試,終于發(fā)現(xiàn)了原因
    2022-10-10
  • C++?Qt開發(fā)之運用QJSON模塊解析數(shù)據(jù)

    C++?Qt開發(fā)之運用QJSON模塊解析數(shù)據(jù)

    JSON(JavaScript?Object?Notation)是一種輕量級的數(shù)據(jù)交換格式,它易于人閱讀和編寫,也易于機器解析和生成,本文主要介紹了Qt如何運用QJson組件的實現(xiàn)對JSON文本的靈活解析功能,需要的可以參考下
    2024-01-01
  • C++雙向循環(huán)列表用法實例

    C++雙向循環(huán)列表用法實例

    這篇文章主要介紹了C++雙向循環(huán)列表,實例分析了C++雙向循環(huán)列表的創(chuàng)建、輸出、添加、刪除、移動的相關操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 在Visual Studio Code中配置C++編譯環(huán)境的問題

    在Visual Studio Code中配置C++編譯環(huán)境的問題

    關于Visual Studio Code對C++環(huán)境的配置方法應該有好多種,我這里用到了其中的兩種,具體內容詳情文中給大家詳細介紹,對Visual Studio Code配置C++編譯環(huán)境相關知識感興趣的朋友一起看看吧
    2021-07-07
  • VS2019上配置CUDA的環(huán)境步驟

    VS2019上配置CUDA的環(huán)境步驟

    本文主要介紹了VS2019上配置CUDA的環(huán)境步驟,文中通過圖文示例介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • C語言開發(fā)實現(xiàn)井字棋及電腦落子優(yōu)化示例詳解

    C語言開發(fā)實現(xiàn)井字棋及電腦落子優(yōu)化示例詳解

    以前上課經(jīng)常和同桌玩起井字棋,那么我們就當我們回憶童年,現(xiàn)在也用C語言來實現(xiàn)井字棋,本次代碼相對于初階的井字棋,在電腦下棋代碼部分做了優(yōu)化,使得電腦更加具有威脅
    2021-11-11
  • c++ 快速排序算法【過程圖解】

    c++ 快速排序算法【過程圖解】

    下面小編就為大家?guī)硪黄猚++ 快速排序算法【過程圖解】。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • C++重載運算符的規(guī)則詳解

    C++重載運算符的規(guī)則詳解

    運算符重載函數(shù)可以是類的成員函數(shù),也可以是類的友元函數(shù),還可以是既非類的成員函數(shù)也不是友元函數(shù)的普通函數(shù)
    2013-10-10

最新評論