this和*this区别

return this返回的是当前对象的地址,this表示一个临时地址指针

而return *this返回的是this指针所指向的对象,根据引用的有无来确定返回的对象是本身的克隆还是本身。*this作为右值时,浅拷贝操作。

*this的对象构建完后会马上被销毁,是一个暂时的对象。因为this指针是在调用成员函数时候生成,调用结束销毁this指针。

比如

	    类名 get_copyed()
		{
			return *this;
		}

返回的是克隆(印刷品、盗版)

再比如

	    类名& get_original()
		{
			return *this;
		}

返回的是本身(原稿)

实例

#include<bits/stdc++.h>
using namespace std;
class A
{
	public:
		int x;
		/***得到指针指向的地址***/
		A* get_address()
		{
			return this;
		}
		/***得到复制样本***/ 
		A get_copyed()
		{
			return *this;
		}
		/***得到原稿***/ 
		A& get_original()
		{
			return *this;
		}
		/***析构函数***/
		
};
int main()
{
	A a;
	a.x=333;
	
	/***确认返回的是地址***/
	if(&a==a.get_address())
	{
		cout<<"地址对上了"<<endl<<"`````````"<<endl; 
	 }
	else
	{
		cout<<"地址没对上"<<endl<<"`````````"<<endl; 
	} 
	
	
	/***copy***/
	A reveive_temporary1=a.get_copyed();
	if(&a!=&reveive_temporary1&&a.x==reveive_temporary1.x)
	{
		cout<<"地址没对上,但值拿到了"<<endl<<"`````````"<<endl; 
	 }
	else 
	{
		cout<<"猜想错误"<<"`````````"<<endl; 
	}  
	
	
	/***原稿***/
	//这里也要用一个引用A& reveive_temporary2
	A& reveive_temporary2=a.get_original();
	if(&a==&reveive_temporary2&&a.x==reveive_temporary2.x)
	{
		cout<<"地址对上了,值也拿走了"<<endl<<"`````````"<<endl; 
	 }
	else 
	{
		cout<<"猜想错误"<<endl<<"`````````"<<endl; 
    }
    
    return 0; 
}

打印结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值