C++中this指針的介紹及使用實(shí)例講解
this指針的介紹及使用
1.this指針的作用
Cat &cmpAge(Cat &other)
{
if(other.age>age)
return other;
else
return *this;
}用這個(gè)例子引出this指針:
指向當(dāng)前對(duì)象的一個(gè)指針,哪個(gè)對(duì)象調(diào)用成員函數(shù),this指針就指向該對(duì)象
示例代碼1:(this指針存放當(dāng)前對(duì)象的地址)
#include <iostream>
using namespace std;
/*
引入this指針:C++專門(mén)用來(lái)指向當(dāng)前對(duì)象地址的一個(gè)指針
當(dāng)前對(duì)象是誰(shuí),this指針就自動(dòng)存放了誰(shuí)的地址
當(dāng)前對(duì)象:誰(shuí)調(diào)用了成員函數(shù),誰(shuí)就是當(dāng)前對(duì)象
*/
class Rect
{
public:
/*
底層原理:
當(dāng)前對(duì)象.show();
Rect *this=&當(dāng)前對(duì)象
*/
void show()
{
cout<<"this指針打印出來(lái)的地址是當(dāng)前對(duì)象的地址: "<<this<<endl;
}
};
int main(int argc,char **argv)
{
//創(chuàng)建矩形類的對(duì)象
Rect r1;
Rect r2;
cout<<"r1的地址: "<<&r1<<endl;
cout<<"r2的地址: "<<&r2<<endl;
//當(dāng)前對(duì)象:誰(shuí)(r1)調(diào)用了成員函數(shù),誰(shuí)(r1)就是當(dāng)前對(duì)象
r1.show();
//當(dāng)前對(duì)象:誰(shuí)(r2)調(diào)用了成員函數(shù),誰(shuí)(r2)就是當(dāng)前對(duì)象
r2.show();
}
/*
執(zhí)行結(jié)果:
r1的地址: 0x7ffdf90a5cb6
r2的地址: 0x7ffdf90a5cb7
this指針打印出來(lái)的地址是當(dāng)前對(duì)象的地址: 0x7ffdf90a5cb6
this指針打印出來(lái)的地址是當(dāng)前對(duì)象的地址: 0x7ffdf90a5cb7
*/示例代碼2:(this指針的使用)
#include <iostream>
using namespace std;
/*
引入this指針:C++專門(mén)用來(lái)指向當(dāng)前對(duì)象地址的一個(gè)指針
當(dāng)前對(duì)象是誰(shuí),this指針就自動(dòng)存放了誰(shuí)的地址
定義方法:比較兩個(gè)矩形對(duì)象的大小(按照w和h比較,要求w,h都同時(shí)大于另外一個(gè)矩形),返回較大的那個(gè)對(duì)象
*/
class Rect
{
public:
//定義方法給w,h設(shè)置值,間接地使用w和h
void setAttr(float _w,float _h);
//比較兩個(gè)矩形的大小
Rect compare(Rect &other)
{
if((this->w)>other.w && (this->h)>other.h)
{
return *this;
}
else
return other;
}
void show()
{
cout<<"寬: "<<w<<endl;
cout<<"高: "<<h<<endl;
}
private:
//屬性
float w;
float h;
};
void Rect::setAttr(float _w,float _h)
{
w=_w;
h=_h;
}
int main(int argc,char **argv)
{
//創(chuàng)建矩形類的對(duì)象
Rect r1;
Rect r2;
//設(shè)置寬高
r1.setAttr(9.8,5.6);
r2.setAttr(1.2,0.5);
//比較大小
//寫(xiě)法1:當(dāng)前對(duì)象就是r1
//Rect temp=r1.compare(r2);
//temp.show();
//寫(xiě)法2:當(dāng)前對(duì)象就是r2
Rect temp=r2.compare(r1);
temp.show();
}
/*
執(zhí)行結(jié)果:
寬: 9.8
高: 5.6
*/ 2.this指針的寫(xiě)法
this->age //指針調(diào)用
(*this).age //this解引用
示例代碼:
#include <iostream>
using namespace std;
/*
this指針平時(shí)寫(xiě)成員函數(shù)代碼,可以省略的
*/
class Rect
{
public:
void show()
{
}
void setAttr(float _w,float _h)
{
//寫(xiě)法1:標(biāo)準(zhǔn)的寫(xiě)法-->寫(xiě)全面
//this->w=_w;
//this->h=_h;
//寫(xiě)法2:省略this的寫(xiě)法
w=_w;
h=_h;
}
private:
float w;
float h;
};
int main(int argc,char **argv)
{
Rect r1;
Rect r2;
r1.setAttr(1.2,0.8);
}到此這篇關(guān)于C++中this指針的介紹及使用的文章就介紹到這了,更多相關(guān)C++ this指針內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
OpenMP task construct 實(shí)現(xiàn)原理及源碼示例解析
這篇文章主要為大家介紹了OpenMP task construct 實(shí)現(xiàn)原理及源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
C++實(shí)現(xiàn)leetcode(3.最長(zhǎng)無(wú)重復(fù)字符的子串)
這篇文章主要介紹了C++實(shí)現(xiàn)leetcode(3.最長(zhǎng)無(wú)重復(fù)字符的子串),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C++如何將二叉搜索樹(shù)轉(zhuǎn)換成雙向循環(huán)鏈表(雙指針或數(shù)組)
這篇文章主要介紹了C++如何將二叉搜索樹(shù)轉(zhuǎn)換成雙向循環(huán)鏈表(雙指針或數(shù)組),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
c++優(yōu)先隊(duì)列用法知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理的是關(guān)于c++優(yōu)先隊(duì)列用法知識(shí)點(diǎn)總結(jié)內(nèi)容,需要的朋友可以參考學(xué)習(xí)下。2020-02-02
詳解C++中對(duì)構(gòu)造函數(shù)和賦值運(yùn)算符的復(fù)制和移動(dòng)操作
這篇文章主要介紹了C++中對(duì)構(gòu)造函數(shù)和賦值運(yùn)算符的復(fù)制和移動(dòng),是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-01-01

