掘根宝典之C++this指针

什么是this指针

在C++中,this指针是一个特殊的指针,它指向当前对象。每个非静态成员函数都有一个隐式的this指针被作为隐藏参数传递给它(而且通常是函数的第一个参数),它可以在函数内部访问对象的成员(无论是public,还是private,protected)

this指针被作为隐藏参数传递给方法

程序员眼中的代码是

class AA
{
private:
int a_;

public:
AA(int a)
{
a_=a;
}

int B()
{
return a;
}

static void C()
{
cout<<"不传this指针"<

编译器眼中的代码

class AA
{
private:
int a_;
//this指针作为非静态成员函数的第一个参数隐式传递
public:
AA(AA*this,int a)
{
this->a_=a;
}

int B(AA*this)
{
return this->a_;
}

void C()
{
cout<<"不传this指针"<

此外,this指针只能在非静态成员函数和成员函数中使用。在静态成员函数中,由于没有当前对象的概念,因此不能使用this指针。

this指针的特点

关于this指针,有以下几点总结:

1.this指针指向当前对象,可以访问当前对象的所有成员变量。包括private、protected、public。

2.this指针是*const指针,一切企图修改该指针的操作,如赋值(改变指向)、增减都是不允许的!

3.this指针只有在成员函数中才有定义。只能在成员函数里使用,因此,在创建一个对象后,也不能通过对象使用this指针。所以,我们也无法知道一个对象的this指针的位置(只有在成员函数里才有this指针的位置)。当然,在成员函数里,你是可以知道this指针的位置的(可以&this获得),也可以直接使用的。

4.只有创建对象后,this指针才有意义。

5.static静态成员函数不能使用this指针。原因静态成员函数属于类,而不属于某个对象,所以static静态成员函数压根就没有this指针。

6.this在成员函数的开始执行前构造的,在成员函数的执行结束后清除。至于如何清除的,由编译器实现,程序员不关心。this是通过函数参数的首参数来传递的
                        

使用this指针

例子1

class AA
{
private:
int a_;

public:
AA(int a)
{
this->a_=a;
}

int B()
{
return this->a;
}

AA C()
{
return *this;//返回自身对象
}

};

用new创建的对象的地址和this指针指向的地址一样

#include
using namespace std;
class AA
{
private:
	int a_;

public:
	AA(int a)
	{
		a_ = a;
	}

	void B()
	{
		cout << this << endl;;
	}

};
int main()
{
	AA* w = new AA(2);
	cout << w << endl;
	w->B();
}

我们发现打印出来的结果一样哦!!

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