在c++中,每一个类的成员函数中,都隐藏了一个this指针,该指针是指向一个正在被某个成员函数操作的对象的指针,当对象调用成员函数时,系统会先将该对象的地址传给this指针,然后再调用成员函数,每次成员函数访问对象的成员时,都会使用this指针。
下面用一段代码来解释:
#include <iostream.h>
class A
{
public: A(int i,int j )//公共类型成员函数
{
int a,int b;
a = i;
b = j;
}
A( )
{
int a,int b;
a = b =0;
}
void Copy(A &aa);
int Returna()
{
return a;
}
void Reyurna()
{
return b;
}
private:
int a, int b;//私有成员变量
};
void A::Copy(A &aa)//访问类A里面的成员函数Copy
{
if (this == &aa)//判断this所指向的a1的地址是否与&aa相同
return;
else
*this = aa;//将aa的值赋给this所指向的对象
}
int main ()
{
A a1,a2(3,4);
a1.Copy(a2);
cout<<a1.Returna() -a2.Returna()<<","<<a1.Returna() + a2.Returna()<<endl;
}
其实this指针在结构和类之间起承转和作用,仅出现在非静态成员函数中
this->Copy::A(); this->Copy::A_test();//完整表示
Copy::A(); Copy::str;//与上一个基本相同访问特定类成员
this—>A(); this->str_1;//this指针访问,对象指针访问成员
A(); str_1;//全缺省表示,与上一个基本相同
b.A()//假定对象b调用成员函数A
this此时等于&b;
则有 this->A();//表示对象b的隐藏指针调用成员函数。也可理解为隐藏的this指针是成员函数正确的操作对象数据
因此我们就可以理解:
void A::Copy(int a,int b) void A::Copy(int a,int b)
{ {
x = a; this-> x = a;
y = b; this-> y = b;
} }
有关this指针的问题:
1:this指针是在什么时候创建的?
this指针在成员函数开始执行前构造,在成员执行结束时清除
2:this指针存放在什么位置?
其会因编译器不同,可能是栈,也可能是寄存器,或者全局变量。
3:this指针是怎么传递类中的函数的?
通过函数参数的首参数来传递的
4:在c++中类和结构的区别?
类的成员默认为private(私有) 结构默认为public(共有)
this在其中作用相同。
5:this只能在成员函数中使用,全局函数,静态函数都不能使用this。
6:this并不是对象的一部分,不会影响sizeof(对象)的结果