(5)C++this指针


This指针


前奏:

#include<iostream>
using namespace std;

class Cstu
{
public:
	int a;
	Cstu(int a)
	{
		a = a;  //此时,构造函数里的a,只是函数里的,把外面的a覆盖了
	}
	void print()
	{
		cout << a << endl;
	}
};
int main()
{
	Cstu stu(12);
	stu.print();
	system("pause");
	return 0;
}

鉴于上面a的问题,C++提供了区别a的方法:this指针。

	Cstu(int a)
	{
		this->a = a; 
		//用this指针区别a  this指针指向当前对象Cstu*,即可以直接访问成员了
	}

1.作用:
a.区分同名变量
b.是指向当前对象的指针 即可通过指针访问成员
this->print();
c.得到对象地址

重要:

类内的指针类型函数返回地址(返回的是地址时要用指针函数),在主函数中就要用类的指针类型去指向

	Cstu* Getaddress()  //this是指针
	{
		return this;  //得到对象地址
	}
	//主函数调用    p是Cstu*类型的指针 即类指针
	Cstu*p = stu.Getaddress();  //定义类的指针接类内对象的地址

得到对象地址的代码:

class Cstu
{
public:
	int a;
	Cstu(int a)
	{
		this-> a = a;  
		//用this指针区别a  this指针指向当前对象Cstu*,即可以直接访问成员了
		this->print();
	}
	void print()
	{
		cout << a << endl;
	}
	Cstu* Getaddress()  //this是指针
	{
		return this;  //得到对象地址
	}
}
	int main()
{
	Cstu stu(12);
	stu.print();
	//Getaddress()返回的类型是Cstu*,用类指针去接
	Cstu*p = stu.Getaddress();  //定义类的指针接类内对象的地址
	p->print();//此时就可以直接用p指针指向函数了
	cout << p << endl;
	system("pause");
	return 0;
}

特别注意:
上面定义的p是类指针,可以直接通过p来调用函数成员
d.得到对象

	Cstu* Getaddress() //this是指针,用Cstu*函数名()
	{
		return *this;  //得到对象	
	}
		int main()
{
	Cstu stu(12);
	stu.print();
	Cstu*p = stu.Getaddress();  //定义类的指针接类内对象的地址
	cout << *p << endl;
	system("pause");
	return 0;
}

2.注意:
a.对象创建时才有,没有对象就没this指针
b.类型是 对应对象的类的指针的类型 如下:

	Cstu(int a)
	{
		this->a = a; //this是stu对应类的指针类型 即Cstu*
	}
//主函数调用
	Cstu stu(12);

c.this指针不是成员 是类成员函数的隐含参数
即在函数参数中,有一个隐式参数,让我们可以写this

class Cstu
{
public:
	int a;
	//this ->a;  //写在成员函数外不行
	Cstu(int a)  
	{
		this-> a = a;  
	}
	void print()
	{
		this->a;
		cout << a << endl;
	}
};

d.作用域是在类内部,系统默认传递给函数(非静态函数)的隐含参数
如上所述,只能在函数成员内写this

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐鑫本鑫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值