this指针的使用

this指针
  1. 以下代码中定义了三个对象a,b,c. 因此有三个同样空间大小分别存放三个对象的数据成员。但是三个对象都同样调用了calCircle()函数.当不同对象的成员函数引用数据成员时,如何保证引用的是指定对象的数据成员呢?

  2. 在每一个成员函数中都包含一个特殊的指针,称为this指针,它是指向本类对象的指针。
    this指针是一个特殊的隐含指针,它隐含在每一个类的非静态成员函数中(包括构造函数和析构函数),即类的每个非静态成员函数都有一个this指针指向调用这个成员函数的对象。

  3. 当一个对象调用成员函数时,编译系统先将对象的首地址赋给this指针,然后调用成员函数。在成员函数存取数据成员时,隐含的使用this指针,这样成员函数就能够通过this指针来访问目的对象的数据成员。

  4. 例如:当a调用成员函数calCircle()时,编译系统将对象a的起始地址赋给this指针,成员函数按照this指针的指向找到对象a的数据成员。因此,calCircle()函数计算PI *r * r时,实际上是执行: PI * (this->r) * (this->r),因为当前this指针指向a,因此相当于执行以下语句:PI *a.r *a.r 。

  5. 成员函数calCircle()的定义如下:
    double Circle::calCircle()
    {
    return PI * r * r;
    }
    C++编译后把它处理为:
    double Circle::calCircle(Circle * this)
    {
    return PI *(this->r) *(this->r);
    }
    即在成员函数的形参列表中增加了一个this指针。在调用该成员函数时,实际上是用以下方式调用的:a.calCircle(&a);
    将对象a的地址传递给形参this指针,然后按this的指向去引用对象的数据成员。

  6. 上述的这些过程都是编译系统自动实现的,程序设计者不必人为的在形参中增加this指针,也不必将对象a的地址传递给this指针。同时,在需要的时候也可以显式的使用this指针。

#include <iostream>

using namespace std;

const double PI=3.1415926;

//this指针 
class Circle{
	private:
		double r;
	public:
		Circle(double r1);//构造函数
		~Circle(){ };
		double calCircle();
};

Circle::Circle(double r1)
{
	r=r1;
}

double Circle::calCircle()
{
	return PI*r*r;
}

int main()
{
	Circle a(5);
	Circle b(8);
	Circle c(10);
	cout<<a.calCircle()<<endl;
	cout<<b.calCircle()<<endl;
	cout<<c.calCircle()<<endl;
	return 0;
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值