這篇文章主要講解了“C++中的this指針的功能”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++中的this指針的功能”吧!
慈溪網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),慈溪網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為慈溪近千家提供企業(yè)網(wǎng)站建設(shè)服務。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請找那個售后服務好的慈溪做網(wǎng)站的公司定做!
this指針是一個特殊的指針,當類的某個非靜態(tài)的成員函數(shù)在執(zhí)行時,就會存在this指針。它指向類的一個對象,且這個對象的某個成員函數(shù)正在被調(diào)用。
this指針的名字始終是this,而且總是作為隱含參數(shù)傳遞給每一個被聲明的成員函數(shù),例如:
void Date::myFunc(Date* this);
實際編程時函數(shù)的聲明不需要包含這個參數(shù)。
當程序中調(diào)用某個對象的成員函數(shù)時,編譯器會把該對象的地址加入到參數(shù)列表中,感覺上就好象函數(shù)采用了上面所示的聲明,并且是用如下方式來調(diào)用的:
dt.myFunc(& dt);
靜態(tài)成員函數(shù)不存在this指針。
當調(diào)用某個對象的成員函數(shù)時,編譯器把對象的地址傳遞給this指針,然后再調(diào)用該函數(shù)。因此,成員函數(shù)你對任何成員的調(diào)用實際上都隱式地使用了this指針。
1.以this指針作為返回值
使this指針可以允許成員函數(shù)返回調(diào)用對象給調(diào)用者。前面的程序中重載賦值運算符沒有返回值,因此不能用如下的形式對字符串進行賦值:
a=b=c;
為了使重載的類賦值機制也能這樣方便,必須讓賦值函數(shù)返回賦值的結(jié)果,在這里就是目標對象。當賦值函數(shù)執(zhí)行時,其返回值也恰好是this指針所指的內(nèi)容。下面的程序?qū)η懊婺莻€程序進行了修改,讓重載賦值運算符返回了一個Date對象的引用。
#include \"iostream.h\" #include \"string.h\" class Date { int mo,da,yr; char *month; public: Date(int m=0, int d=0, int y=0); ~Date(); void operator=(const Date&); void display() const; }; Date::Date(int m, int d, int y) { static char *mos[] = { \"January\",\"February\",\"March\",\"April\",\"May\",\"June\", \"July\",\"August\",\"September\",\"October\",\"November\",\"December\" }; mo = m; da = d; yr = y; if (m != 0) { month = new char[strlen(mos[m-1])+1]; strcpy(month, mos[m-1]); } else month = 0; } Date::~Date() { delete [] month; } void Date::display() const { if (month!=0) cout<2.在鏈表中使用this指針
在應用程序中,如果數(shù)據(jù)結(jié)構(gòu)里有指向自身類型的成員,那么使用this指針會提供更多的方便。下面的程序中建立了一個類ListEntry的鏈表。
#include \"iostream.h\" #include \"string.h\" class ListEntry { char* listvalue; ListEntry* preventry; public: ListEntry(char*); ~ListEntry() { delete [] listvalue; } ListEntry* PrevEntry() const { return preventry; }; void display() const { cout<> name; if (strncmp(name, \"end\", 3) == 0) break; ListEntry* list = new ListEntry(name); if (prev != 0) prev->AddEntry(*list); prev = list; } while (prev != 0) { prev->display(); ListEntry* hold = prev; prev = prev->PrevEntry(); delete hold; } return 0; } 程序運行時,會提示輸入一串姓名,當輸入完畢后,鍵入\"end\",然后程序會逆序顯示剛才輸入的所有姓名。
程中ListEntry類含有一個字符串和一個指向前一個表項的指針。構(gòu)造函數(shù)從對中獲取內(nèi)存分配給字符串,并把字符串的內(nèi)容拷貝到內(nèi)存,然后置鏈接指針為NULL。析構(gòu)函數(shù)將釋放字符串所占用的內(nèi)存。
成員函數(shù)PrevEntry()返回指向鏈表前一個表項的指針。另一個成員函數(shù)顯示當前的表項內(nèi)容。
成員函數(shù)AddEntry(),它把this指針拷貝給參數(shù)的preventry指針,即把當前表項的地址賦值給下一個表項的鏈接指針,從而構(gòu)造了一個鏈表。它并沒有改變調(diào)用它的listEntry對象的內(nèi)容,只是把該對象的地址賦給函數(shù)的參數(shù)所引用的那個ListEntry對象的preventry指針,盡管該函數(shù)不會修改對象的數(shù)據(jù),但它并不是常量型。這是因為,它拷貝對象的地址this指針的內(nèi)容給一個非長常量對象,而編譯器回認為這個非常量對象就有可能通過拷貝得到的地址去修改當前對象的數(shù)據(jù),因此AddEntry()函數(shù)在聲明時不需要用const。
感謝各位的閱讀,以上就是“C++中的this指針的功能”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對C++中的this指針的功能這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
分享文章:C++中的this指針的功能
標題路徑:http://weahome.cn/article/jpsggs.html