this指針有兩個很重要的應用。
一,隱式和顯式的使用this指針訪問對象的數據成員
二,使用this指針使得串聯的調用函數成為可能
應用一:
#include<iostream>using namespace std;class Test{public: Test(int=10);//構造函數 void PRint();private: int x;};void Test::print(){ cout << " x:" << x;//隱式地調用this指針打印x; cout << "/n this->x:" << this->x;//顯式地調用this指針打印x; cout << "/n(*this).x:" << (*this).x << endl;//顯式地調用this指針打印x;}Test::Test(int val) :x(val){}int main(){ Test t(12); t.print();}注意:當*this與圓點成員選擇運算符一起使用時,括住*this的圓括號。這對括號是必須的,因為圓點運算符具有比*運算符更高的優先級啊。如果不使用的話,表達式*this.x將被認為與*(this.x)是一樣的,進行求值會導致邏輯錯誤。應用二:使用this指針使得串聯的調用函數成為可能
#include<iostream>#include<string>#include<iomanip>#include<ctime>#include<cstdlib>using namespace std;class Time{public: Time(int = 0, int = 0, int = 0);//構造函數 Time &setTime(int, int, int);//獲取時間,注意類型為該類型的引用 Time &setHour(int);//設置小時,注意類型為該類型的引用 Time &setMinute(int);//設置分鐘,注意類型為該類型的引用 Time &setSecond(int);//設置秒,注意類型為該類型的引用 int getHour();//獲取小時 int getMinute();//獲取分鐘 int getSecond();//獲取秒 void print();//輸出時間private: int hour; int minute; int second;};Time::Time(int h, int m, int s){ setTime(h, m, s);}Time &Time::setTime(int h, int m, int s){ setHour(h); setMinute(m); setSecond(s); return *this;//必須返回this指針}Time &Time::setHour(int h){ hour = (h > 0 && h < 24) ? h : 0; return *this;//必須返回this指針}Time &Time::setMinute(int m){ minute = (m > 0 && m < 60) ? m : 0; return *this;//必須返回this指針}Time &Time::setSecond(int s){ second = (s > 0 && s < 60) ? s : 0; return *this;}int Time::getHour(){ return hour;}int Time::getMinute(){ return minute;}int Time::getSecond(){ return second;}void Time::print(){ cout << setfill('0') << setw(2) << hour << ":"<< setfill('0') << setw(2) << minute <<":"<< setfill('0') << setw(2) << second << endl;}int main(){ Time t(12,23,65); t.print(); t.setHour(20).setMinute(34).setSecond(35);//串聯的函數調用 t.print();}注意:程序中的setTime,setHour,setMinute,setSconde設置為Time類的引用,在實現是必須返回*this。
新聞熱點
疑難解答
圖片精選