C++ 返回自身对象的引用,this

首先来看一下如下代码,之前在学习命名空间的时候知道用using namespace std;声明后直接调用cout就不用写前面的std::,那么在matest函数中,给m_a赋值为什么是A::m_a呢

#include <iostream>

using namespace std;

class A
{
public:
	A(int a):m_a(a){}
	void matest(int n);
	void macout()
	{
		cout << m_a << endl;
	}
private:
	int m_a;
};

void A::matest(int n)
{
	m_a = n;
}

int main()
{
	A a(1);
	a.macout();
	a.matest(10);
	a.macout();

	return 0;
}
1
10

在调用成员函数时,编译器负责把这个对象的地址(&a)传递给这个成员函数中的一个隐藏的this形参。
在系统角度看来,任何对类成员的直接访问都被看成是通过this做隐式调用的。

a.matest(10);//可以理解为a.matest(&a,10);

在matest函数中的赋值

m_a = 10;//其实是this->m_a = 10

this是有一个const的修饰

  • this指针只能在成员函数中使用,全局函数、静态函数都不能使用this指针。
  • 在普通成员函数中,this是一个指向非const对象的const指针(类型为A,那么this就是 A *const this),表示this只能指向当前A对象的对象指针。
  • 在const成员函数中,this指针是一个指向const对象的const指针(在mutable博客中提到,const修饰的函数里面不能修改类参数的任何状态,类型为A,this就是const A *const this类型的指针)
#include <iostream>

using namespace std;

class A
{
public:
	A(int a):m_a(a){}
	A& matest(int m_a);
	void macout()
	{
		cout << m_a << endl;
	}
private:
	int m_a;
};

A& A::matest(int m_a)
{
	m_a = m_a;

	return *this;//把对象自己给返回回去
}

int main()
{
	A a(1);
	a.macout();
	a.matest(10);
	a.macout();

	return 0;
}

以上代码中m_a与A::m_a是一样的,那么a.matest(10);的调用结果如下

1
1

这时候就可以用this来区分

this->m_a = m_a;
1
10

还有一种比较有意思的是

#include <iostream>

using namespace std;

class A
{
public:
	A(int a):m_a(a){}
	A& matest(int m_a);
	void macout()
	{
		cout << m_a << endl;
	}
private:
	int m_a;
};

A& A::matest(int m_a)
{
	this->m_a = m_a;

	return *this;//把对象自己给返回回去
}

int main()
{
	A a(1);
	a.macout();
	a.matest(10).matest(15).macout();

	return 0;
}

结果

1
15

因为A::matest返回的是对象自己,所以可以接着进行操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值