C++系列--this指针的用途

this指针的用途

  • this指针的本质
  • this指针的用途
    • this指针区分成员变量和形参
    • this作为成员函数返回值

this指针的本质

  • this指针本身是一个成员函数的形参,相当于Python中的self。在调用成员函数时将对象的地址作为实参传递给 this。
  • this形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器默默地将它添加到参数列表中。
  • this 作为隐式形参,本质上是成员函数的局部变量,所以只能用在成员函数的内部,并且只有在通过对象调用成员函数时才给 this 赋值。

this指针的用途

  • this指针是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。
  • 只有在对象创建后,this指针材有意义。
  • this指针不需要定义,直接使用即可。但只能在类内的非静态成员成员函数中使用。
  • 当形参和成员变量同名时,可以使用this指针进行区分。
  • 当想返回对象本身时,可以用*this返回。

this指针区分成员变量和形参

当成员变量和形参同名时,为了区分二者,要么使用不同的名称,要么对成员变量使用this指针进行区分。
可以将成员变量命名为m_age, m: member的缩写。
code:
	#include
	using namespace std;
	class Person
	{
	public:
		int age = 18;
		Person(int age)
		{
			// age = age; 			// 无法给成员变量初始化为形参的age
			this->age = age;		//this 指针指向的是被调用的成员函数所属的对象
		}
	
	};
	void main()
	{
		Person p1(22);
		cout << p1.age << endl;
		system("pause");
	};
result:
	22

this作为成员函数返回值

  • 假设成员变量要实现不断地自加,可以使用链式编程思想,可以不断追加。
  • 当返回对象本身,并且以引用方式返回时,就是一直对该对象进行操作。
code:
	#include
	using namespace std;
	class Person
	{
	public:
		int m_age = 18;
		Person(int age)
		{
			m_age = age;
		}
		Person& age_plus(Person p1)
		{
			m_age += p1.m_age;		//this 指针指向的是被调用的成员函数所属的对象
			return *this;
		}
		Person age_plus_1(Person p1)
		{
			m_age += p1.m_age;		//this 指针指向的是被调用的成员函数所属的对象
			return *this;
		}
	};
	void main()
	{
		Person p1(100);
		Person p2(p1);
		Person p3(p1);
		cout << p2.m_age << endl;
		p2.age_plus(p1).age_plus(p1).age_plus(p1);
		cout << p2.m_age << endl;
		p3.age_plus_1(p1).age_plus_1(p1).age_plus_1(p1);
		cout << p3.m_age << endl;
		system("pause");
	};
result:
	100
	400

你可能感兴趣的:(c++,开发语言)