一,this指针引入
不同对象调用相同函数时 ,打印出来的值不一样,为什么?
这就隐含了一个this指针。this指针又叫隐含的this指针。(不能显示写,但能显示用)
注:1,红色部分为编译器的处理。
2,严谨写法为Date*count this 。count修饰this,this不能修改,this指向的内容可以修改。
代码如下:
using namespace std;
#include<iostream>
class Date
{
public:
void Display()
{
cout << _year << "-" << _month << "-" << _day << endl;
}
void SetDate(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
private:
int _year; // 年
int _month; // 月
int _day; // 日
};
int main()
{
Date d1, d2;
d1.SetDate(2022, 5, 11);
d2.SetDate(2022, 5, 12);
d1.Display();
d2.Display();
return 0;
}
运行结果:
面试题:
1,this指针存在哪里?
答:栈桢或寄存器。
this指针是个形参,形参是在函数的栈桢里,在函数的栈桢里面的变量是属于栈中的。
有时编译器会使用寄存器对其进行优化,this指针会存在寄存器中。
2,this指针可以为空吗?
答:可以。
当我们在调用函数的时候,如果函数内部并不需要使用到this,也就是不需要通过this指向当前对象并对其进行操作时才可以为空,如果调用的函数需要指向当前对象,并进行操作,则会发生错误(空指针引用)就跟C中一样不能进行空指针的引用。
简单来说,用不到this,可以为空。用得到this,不可为空,因为不能进行空指针引用。