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。
新闻热点
疑难解答
图片精选