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指针使得串联的调用函数成为可能
#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。