一个类可以有多个对象,怎么能保证引用的是所指定的对象的数据成员呢?
在每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,即this。它是指向本类对象的一个指针,他的值是当前被调用的成员函数所在对象的起始地址。
举例:
#include<iostream>
using namespace std;
class person{
public:
person(int year=1990,int month=1,int day=1)
:_year(year)
,_month(month)
,_day(day)
{}
void Print(){
cout<<_year<<"-"<<_month<<"-"<<_day<<endl;
}
private:
int _year;
int _month;
int _day;
};
int main(){
person p1(1996,4,27);
person p2(1995,5,27);
p1.Print();
p2.Print();
}
this指针是隐式使用的,它作为参数被传递给成员函数,实际上Print函数的定义Wie:
void Print(person *this)
{
cout<<this->_year<<"-"<<this->_month<<"-"<<this->_day<<endl;
}
当调用p1.Print()时,就把p1的起始地址赋给了this指针。
在调用成员函数时实际上是p1.Print(&p1),即将p1的地址赋给this指针,然后按照this指针的指向去引用其他成员。
注意:
this指针是隐式的,是编译系统自动实现的,不可以显示的在星灿鸿添加this指针,也不必将p1的地址传给this。可以在成员函数内显示的使用this指针。
并不是所有的成员函数都有this指针。比如构造函数,静态成员函数就没有this指针,因为构造函数只在创建对象的时候调用一次,静态成员函数是属于类的,不属于对象,所以没有this指针。