【C++】谈一谈this指针

关于this指针的一个经典回答

当你进入一个【房子后,   
你可以看见桌子、椅子、地板等,   
但是房子你是看不到全貌了。   
对于一个类的实例来说,   
你可以看到它的【成员函数【成员变量,   
但是实例本身呢?   
this是一个【指针,它时时刻刻指向你这个【实例本身

this指针基本用法

class Date
{
public:
	void SetDate(int year, int month, int day)
	{
		this->year = year;
		this->month = month;
		this->day = day;
	}

	void PrintDate()
	{
		cout<<year<<"-"<<month<<"-"<<day<<endl;
	}
private:
	int year;
	int month;
	int day;
};

在上面这则代码中,我们定义了一个  【日期类】Date

在构造函数 Date(int year,int month,int day) 中

由于【参数名】【私有成员名】同名

我们利用this指针将【私有成员】【参数】分开

这便是this指针的基本用法


this指针是哪里来的,编译器如何生成this指针

让我们来看一下【反汇编代码来探索this指针

对下面的主函数【调试】的时候进行反汇编

int main(void)
{
	Date d1(2016,9,27);
	system("pause");
	return 0;
}


结果如下:



进过反汇编,我们知道了 【ecx】寄存器是存储 【对象d1】的地址的

也就是【this指针】所指向的内容


为什么设置this指针

让用this指针和C语言的结构体】做一些对比

struct Date
{
	int year;
	int month;
	int day;
};

void SetDate(Date* date, int _year, int _month, int _day)
{
	date->year = _year;
	date->month = _month;
	date->day = _day;
}

我们对 【结构体】的成员进行赋值时

传入了该【结构体类型】的指针

才可以赋值

C++【this指针】也是这个作用

并且在类的成员函数中,会默认传入this指针


修改this指针

我们可不可以修改this指针指向的内容呢?

我们试着给this指针赋一个【NULL】吧~~【好刺激】

然而设计编译器的人早已【预料到这个问题了。。。

所以

this指针的类型是

【Class * const】

对于this指针的总结

1.this指针隐含在每一个类的成员函数中,在【调用该函数时创建,在该函数调用【结束时销毁
2.this指针可以和传入的参数区分开
3.this指针被隐含的声明为 【Class * const this】  ,代表着不能给this指针进行赋值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值