隐含的this指针

类对象存储方式

class Date
{
public:
	void Print()
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}
	void Init(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Date d1;
	d1.Init(2022, 8, 24);
	Date d2;
	d2.Init(2022, 9, 24);
	d1.Print();
	d2.Print();
}

调的是同一个函数,没有必要在对象中各自存一份,但是成员变量各自存一份,值都不一样,因此在公共区域中存成员函数

❓❓❓如果说函数在公共代码区那么打印的时候怎么区分呢?成员函数如何知道哪个对象的数据成员要被操作呢?d1.Print(); d2.Print();-------this指针,通过该指针来访问自己的地址

隐含的this指针

1️⃣在c++中,每一个对象都能通过this指针来访问自己的地址,this指针是所有成员函数的隐含参数

2️⃣ this只能在成员函数中使用,成员函数的第一个默认参数为T*const this

3️⃣ this指针不能在静态函数中使用,静态函数如同静态变量一样,不属于具体的哪一个对象,它表示了整个范围意义上的信息,而this指针却实实在在的对应一个对象

4️⃣ this指针在成员函数的开始执行前构造的,在成员执行后清除

5️⃣ this指针本身不能被修改,因为const修饰,this指向对象可以被修改

 

🌰

class A
{
public:
	void Show()
	{
		cout << "show()" << endl;
	}
private:
	int _a;
};
int main()
{
	A* p = nullptr;
	p->Show();
}

 程序运行结果:正常运行

➡️show函数中打印的值不用this指针去相应对象中寻找,正常打印出来即可

🌰🌰

class A
{
public:
	void Show()
	{
		cout << _a << endl;
	}
private:
	int _a;
};
int main()
{
	A* p = nullptr;
	p->Show();
}

程序运行结果:运行崩溃

 💕this指针存在栈里面,有些编译器会使用寄存器优化存放到寄存器

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值