C++之“this指针”

来源:互联网 发布:2008年网络流行歌曲 编辑:程序博客网 时间:2024/06/05 17:11

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。


1 0
原创粉丝点击