c++,this指针是常量指针,为什么还是可以指向不同的对象?
来看下面一段代码:
class Data
{
private:
int _year;
int _month;
int _day;
public:
void Init(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
void Print()
{
cout << _year << " " << _month << " " << _day << endl;
}
};
int main()
{
Data d1;
Data d2;
d1.Init(2022, 2, 25);
d2.Init(2022, 2, 26);
d1.Print();
d2.Print();
return 0;
}
我们都知道,在定义对象的时候,对象中只存储成员变量而不存储成员函数,那么在调用Print函数时,编译器是如何知道打印的是d1中的值,还是d2中的值呢?
这就需要引入this指针这个概念,其实Print()函数中,并不是没有参数,而是参数被隐藏了,编译器处理的真实情况是:d1.Print(&d1),而接收d1的地址的指针我们称为this指针,它的类型为**const Data* 名为this。即类中定义的函数真实是:Print(const Data this)。
而在函数内部,打印的时候,其实打印的是this->_year,this->_month。
同理在Init函数中,也会将this指针传入,真实传入实际上是:d1.Init(&d1,2022,2,25)
注意:虽然编译器默认如此,但是不能自己像这样将this指针写进去d1.Init(&d1,2022,2,25),d1.Print(&d1),Print(const Data this),如果一定要写的话,可以在函数内部去写this->_year,this->_month。
哪里指向不同的对象了?lz举个例子来看看。
每个对象拥有一个自己的this指针,该this指针只指向对象自己本身,所以它不可能再指向别人