this指针
c++程序到c程序的翻译
//c++程序:
class CCar
{
public:
int price;
void SetPrice(int p);
};
void CCar::SetPrice(int p)
{
price = p;
}
int main()
{
CCar car;
car.SetPrice(20000);
return 0;
}
/*------------------------------*/
//转换成c程序:
struct CCar
{
int price;
};
void SetPrice(struct CCar *this, int p)
{
this->price = p;
}
int mian()
{
struct CCar car;
SetPrice(&car, 20000);
return 0
}
this指针的作用:指向成员函数所作用的对象。
1、非静态成员函数中可以直接使用this来代表指向该函数作用的对象指针。
class Complex
{
public:
double real, imag;
void Print()
{
cout << real << "," << imag;
}
Complex(double r, double i): real(r), imag(i){}
Complex AddOne()
{
this->real++; //等价于real++;
this->Print(); //等价于Print();
return *this; //this指针指向AddOne()所作用的对象
}
};
int main()
{
Complex c1(1, 1), c2(0, 0);
c2 = c1.AddOne();
return 0;
}
/*
输出:
2,1
*/
class A
{
int i;
public:
void Hello()
{
cout << "hello" << endl; //void Hello(A *this) {cout << "hello" << endl;}
}
};
int main()
{
A *p = NULL;
p->Hello(); //Hello(p);
return 0;
}
/*
输出:
hello
*/
/*-----------------------------------*/
class A
{
int i;
public:
void Hello()
{
cout << i << "hello" << endl; //void Hello(A *this) {cout << this->i << "hello" << endl;}
}
};
int main()
{
A *p = NULL;
p->Hello(); //Hello(p);
return 0;
}
/*
程序报错: p是一个空指针,即this是空指针
*/
2、this指针和静态成员函数
静态成员函数中不能使用this指针。(因为静态成员函数不具体作用于某个对象,所以静态成员函数真实参数个数就是程序中写出的参数个数)