C++簡明圖解this指針的使用
c++的封裝性:將數據 和 方法 封裝在一起
數據 和 方法 是分開存儲。
每個對象 擁有獨立的數據.
每個對象 共享同一個方法。
成員數據和成員函數的存儲方式
1、成員函數不占類的空間
2、靜態成員數據不占類的空間
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; }
運行結果:
this指針概述
1、對象調用普通成員函數 在成員函數內部會產生一個指向該對象的this指針(this指針變量 是系統定義的)
2、this指針的目的:說明當前成員函數 是屬於哪個對象的
3、靜態成員函數內部 沒有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; }
運行結果:
註意:
1、this指針是隱含在對象成員函數內的一種指針
2、成員函數通過 this指針 即可知道操作的是那個對象的數據(定位對象)
3、靜態成員函數內部沒有this指針,靜態成員函數不能操作非靜態成員變量
(靜態成員函數 是屬於類 函數內部 沒有this指針)
this指針的使用
1、當形參和成員變量同名時,可用this指針來區分
class Data { public: int num; //形參 和成員名相同 void setNum(int num) { //形參num //成員num this->num //num= num;//就近原則 形參num 賦值給 形參num this->num = num; //將形參num 賦值給 對象中成員num } };
2、在類的普通成員函數中返回對象本身(*this)(重要)
class MyCout { public: MyCout& myCout(char *str) { cout<<str; return *this;//*this 代表就是 當前調用該函數的對象 } }; 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; }
運行結果:
3、如果成員數據和函數的形參 同名 必須使用this指針
class Data { public: int a;//4B public: void setA(int a) { this->a = a; return; } int getA(void) { return this->a; } };
4、this指針完成鏈式操作
class Printf { public: Printf& myPrint(int value) { cout<<value<<" "; //*this ==外界的對象 return *this; } }; void test01() { Printf ob; ob.myPrint(10).myPrint(20).myPrint(30).myPrint(40); cout<<endl; }
到此這篇關於C++簡明圖解this指針的使用的文章就介紹到這瞭,更多相關C++ this指針內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!