this指针在很多时候都是隐式调用
下面这个代码:
class A
{
public:
A()
{
a=2;
}
void output()
{
cout<<this->a;
}
private:
int a;
};
int main(int argc,char **argv)
{
A myA;
myA.output();
return 0;
}
实际上output成员函数在构造时候生成了一个class类型的this指针形参:(第一个默认形参都是this指针)
函数成员的定义原型是这样:
void(myA *const this);
而在函数调用的时候实际上是把对象的地址传进函数:
myA.output(&A);
而static静态函数是没有this指针的,因为static成员函数是在类里面的,只有一份内存,独立于对象而存在,因此在static中不能使用this指针。如果把函数定义成static类型:编译器会报错:
static void output()
{
cout<<this->a;
}