目录
隐藏的this指针
● 对于类的非静态成员,每一个对象都有自己的一份拷贝, 即每个对象都有自己的数据成员, 不过成员函数却是每个对象共享的。 那么调用共享的成员函数是如何区分自己的的数据成员呢,答案就是通过类中隐藏的this 指针。
● this 指针是隐含在每个类成员函数中的指针, 其指向正在操作此函数的类对象,其类型为当前类类型的指针类型,在const函数中, 为当前类类型的const指针类型。 this指针的作用域是在类内部, 当在类的非静态成员函数中访问类的非静态成员时, 编译器会自动将对象本身的地址作为一个隐含参数传递给函数。
● 注意: 类的静态成员函数中没有this指针
void func(void *p, int val);
class A
{
public:
int getA()
{
return a;
}
void setA(int val);
friend void func(void *p, int val);
private:
int a;
};
void func(void *p, int val)
{
A *pp = (A*)p; 得到对象指针
pp->a = val;
}
void A::setA(int val)
{
func(this, val); 调用全局函数,this 表示当前对象指针
}
int main()
{
A aa;
aa.setA(500);
int x = aa.getA();
cout << "输出x的值:" << x << endl;
system("pause");
return 0;
}
在调用函数func时第一个参数是this 指针, 表明将对象aa 的指针传入 func中,然后通过对象aa 改变其中的成员变量a的值。
通过对象aa 调用setA() 函数, 在该函数的内部,this指针持有aa 对象的地址。 以这样