我们知道,每个对象的成员函数都可以操作对象的数据,成员函数如何知道操作的是哪个对象?每个对象都可以通过this指针访问自己的地址。对象的this指针不属于对象的一部分,即this指针不会出现在sizeof的操作结果中。但this指针会在每次非static成员函数调用对象时作为一个隐式参数传递给对象(通过编译器)。
下面通过一个程序来说明this指针如何进行调用的。
#include<iostream>
using namespace std;
using namespace std;
class Test
{
public:
Test(int = 0);
void print() const;
private:
int x;
};
Test::Test(int value) : x(value)
{
}
void Test::print() const
{
cout<<" x = "<<x;
cout<<"\n this->x = "<<this->x;
cout<<" \n(*this).x = "<<(*this).x<<endl;
}
int main()
{
Test testObject(12);
testObject.print();
return 0;
}
程序执行的结果是:
在函数中注意this的使用方式,是this-> 的方式还是(*this). 的方式。
下面在通过稍微复杂一点的函数来说明this指针的使用。
time.h
#ifndef TIME_H
#define TIME_H
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() const;
int getMinute() const;
int getSecond()const;
void printUniversal() const;
void printStandard() const;
private:
int hour;
int minute;
int second;
};
#endif
Time成员函数的实现
Time.cpp
#include<iostream>
using std::cout;
#include<iomanip>
using std::setfill;
using std::setw;
#include "time.h"
Time::Time(int hr,int min,int sec)
{
setTime(hr,min,sec);
}
Time &Time::setTime(int h,int m,int s)
{
setHour(h);
setMinute(m);
setSecond(s);
return *this;
}
Time &Time::setHour(int h)
{
hour = (h >= 0 && h<24) ? h : 0;
return *this;
}
Time &Time::setMinute(int m)
{
minute = (m >= 0 && m < 60) ? m: 0;
return *this;
}
Time &Time::setSecond(int s)
{
second = (s >=0 && s < 60 ) ? s :0;
return *this;
}
int Time ::getHour() const
{
return hour;
}
int Time::getMinute() const
{
return minute;
}
int Time::getSecond() const
{
return second;
}
void Time::printUniversal() const
{
cout<<setfill( '0' )<<setw(2)<<hour<< " : "
<<setw(2)<<minute<< " : "
<<setw(2)<<second;
}
void Time::printStandard() const
{
cout<<((hour == 0||hour == 12) ? 12 : hour % 12)
<<" : "<<setfill('0')<<setw(2)<<minute
<<" : "<<setw(2)<<second
<<(hour < 12 ? " AM " : " PM ");
}
下面是主函数
main函数
#include<iostream>
using std::cout;
using std::endl;
#include "time.h"
int main()
{
Time t;
t.setHour(18).setMinute(30).setSecond(22);
cout<<"Universal time ";
t.printUniversal();
cout<<"\n standard time: ";
t.printStandard();
cout<<"\n\nNew standard ";
t.setTime(20,20,20).printStandard();
cout<<endl;
return 0;
}
以下是程序的执行的结果: