C++簡(jiǎn)明圖解this指針的使用
c++的封裝性:將數(shù)據(jù) 和 方法 封裝在一起
數(shù)據(jù) 和 方法 是分開存儲(chǔ)。
每個(gè)對(duì)象 擁有獨(dú)立的數(shù)據(jù).
每個(gè)對(duì)象 共享同一個(gè)方法。
成員數(shù)據(jù)和成員函數(shù)的存儲(chǔ)方式
1、成員函數(shù)不占類的空間
2、靜態(tài)成員數(shù)據(jù)不占類的空間
this指針的引入
class Data { public: int m_num; void setNum(int num) { m_num = num; } }; void test01() { Data ob1; ob1.setNum(10); cout<<"ob1.m_num = "<<ob1.m_num<<endl; Data ob2; ob2.setNum(20); cout<<"ob2.m_num = "<<ob2.m_num<<endl; Data ob3; ob3.setNum(30); cout<<"ob3.m_num = "<<ob3.m_num<<endl; }
運(yùn)行結(jié)果:
this指針概述
1、對(duì)象調(diào)用普通成員函數(shù) 在成員函數(shù)內(nèi)部會(huì)產(chǎn)生一個(gè)指向該對(duì)象的this指針(this指針變量 是系統(tǒng)定義的)
2、this指針的目的:說(shuō)明當(dāng)前成員函數(shù) 是屬于哪個(gè)對(duì)象的
3、靜態(tài)成員函數(shù)內(nèi)部 沒有this指針
class Data { public: int m_num; void setNum(int num) { //m_num = num; this->m_num = num; } }; void test01() { Data ob1; ob1.setNum(10); cout<<"ob1.m_num = "<<ob1.m_num<<endl; Data ob2; ob2.setNum(20); cout<<"ob2.m_num = "<<ob2.m_num<<endl; Data ob3; ob3.setNum(30); cout<<"ob3.m_num = "<<ob3.m_num<<endl; }
運(yùn)行結(jié)果:
注意:
1、this指針是隱含在對(duì)象成員函數(shù)內(nèi)的一種指針
2、成員函數(shù)通過(guò) this指針 即可知道操作的是那個(gè)對(duì)象的數(shù)據(jù)(定位對(duì)象)
3、靜態(tài)成員函數(shù)內(nèi)部沒有this指針,靜態(tài)成員函數(shù)不能操作非靜態(tài)成員變量
(靜態(tài)成員函數(shù) 是屬于類 函數(shù)內(nèi)部 沒有this指針)
this指針的使用
1、當(dāng)形參和成員變量同名時(shí),可用this指針來(lái)區(qū)分
class Data { public: int num; //形參 和成員名相同 void setNum(int num) { //形參num //成員num this->num //num= num;//就近原則 形參num 賦值給 形參num this->num = num; //將形參num 賦值給 對(duì)象中成員num } };
2、在類的普通成員函數(shù)中返回對(duì)象本身(*this)(重要)
class MyCout { public: MyCout& myCout(char *str) { cout<<str; return *this;//*this 代表就是 當(dāng)前調(diào)用該函數(shù)的對(duì)象 } }; int main(int argc, char *argv[]) { MyCout ob; /* ob.myCout("hehe"); ob.myCout("haha"); ob.myCout("xixi");*/ ob.myCout("hehe").myCout("haha").myCout("xixi");//ob.myCout("hehe") == ob return 0; }
運(yùn)行結(jié)果:
3、如果成員數(shù)據(jù)和函數(shù)的形參 同名 必須使用this指針
class Data { public: int a;//4B public: void setA(int a) { this->a = a; return; } int getA(void) { return this->a; } };
4、this指針完成鏈?zhǔn)讲僮?/p>
class Printf { public: Printf& myPrint(int value) { cout<<value<<" "; //*this ==外界的對(duì)象 return *this; } }; void test01() { Printf ob; ob.myPrint(10).myPrint(20).myPrint(30).myPrint(40); cout<<endl; }
到此這篇關(guān)于C++簡(jiǎn)明圖解this指針的使用的文章就介紹到這了,更多相關(guān)C++ this指針內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言初學(xué)者代碼中的常見錯(cuò)誤與問題
C語(yǔ)言初學(xué)者犯過(guò)的很多錯(cuò)誤都非常典型,在初學(xué)者中非常普遍,于是整理了一下,應(yīng)該對(duì)其他初學(xué)者有借鑒意義2013-11-11C語(yǔ)言模擬實(shí)現(xiàn)簡(jiǎn)單掃雷游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言模擬實(shí)現(xiàn)簡(jiǎn)單掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10利用Matlab制作一個(gè)賊簡(jiǎn)單的粒子圣誕樹
圣誕節(jié)快到了,本文用Matlab繪制了圣誕樹祝你們圣誕節(jié)快樂,所以下面這篇文章主要給大家介紹了關(guān)于如何利用Matlab制作一個(gè)賊簡(jiǎn)單的粒子圣誕樹,需要的朋友可以參考下2022-12-12C語(yǔ)言 完整游戲項(xiàng)目推箱子詳細(xì)代碼
經(jīng)典的推箱子是一個(gè)的古老游戲,目的是在訓(xùn)練你的邏輯思考能力。在一個(gè)狹小的倉(cāng)庫(kù)中,要求把木箱放到指定的位置,稍不小心就會(huì)出現(xiàn)箱子無(wú)法移動(dòng)或者通道被堵住的情況,所以需要巧妙的利用有限的空間和通道,合理安排移動(dòng)的次序和位置,才能順利的完成任務(wù)2021-11-11C++對(duì)象的淺復(fù)制和深復(fù)制詳解及簡(jiǎn)單實(shí)例
這篇文章主要介紹了C++對(duì)象的淺復(fù)制和深復(fù)制詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-04-04