this指针
C++程序到C程序的翻译
class Ccar{
public:
intprice;
voidSetPrice(int p);
};
void Ccar::SetPrice(int p){
price= p;
}
int main(){
Ccarcar;
car.SetPrice(20000);
return 0;
}
一开始没有C++编译器,C++àC,然后用C的编译器。
struct Ccar{
intprice;
};
void SetPrice(struct Ccar *this, int p){this->price = p;}
int main(){
structCcar car;
SetPrice(&car,20000);
return0;
}
this指针的作用
作用就是指向成员函数所作用的对象
非静态成员函数中可以直接使用this来代表指向该函数所作用的对象的指针。
例1:
class Complex{
public:
doublereal,imag;
voidPrint(){cout<<real<<”,”<<imag;}
Complex(doubler, double i):real(r),imag(i){ }
ComplexAddOne(){
//this指针就是指向AddOne所作用的对象。
this->real++;//等价于real++
this->Print();//等价于Print();
return*this;
}
};
int main(){
Complexc1(1,1),c2(0,0);
c2= c1.AddOne();
return0;
}
例2
class A{
inti;
public:
voidHello{cout<<”hello”<<endl;}
// -->假设用C语言来看(其实也可以用汇编或者机器码来理解)
// voidHello(A *this){cout<<”hello”<<endl;}
// 而p->Hello();被翻译成Hello(p);
};
int main(){
A*p = NULL;
p->Hello();//这条语句干嘛呢?就是调用Hello并且作用于p指向的对象上面。
}
例3(错例)
class A{
inti;
public:
voidHello(){cout<<i<<”hello”<<endl;}
// in C: void Hello(A *this){cout<<this->i<<”hello”<<endl;}
//所以程序会出问题。
};
int main(){
A*p = NULL;
p->Hello();
}
this指针和静态成员函数
l 静态成员函数中不能使用this指针!
l 因为静态成员函数并不具体作用于某个对象!
l 因此,静态成员函数的真实的参数的个数,就是程序中写出的参数个数!