C++学习笔记6:this指针
程序员文章站
2022-07-12 15:38:41
...
1 c++程序到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++程序到C程序翻译
//
#include <iostream>
struct CCar{
int price;
};
void SetPrice(struct CCar* the,int p){
the->price = p;
}
int main(){
struct CCar car;
SetPrice(&car, 20000);
return 0;
}
2 this指针作用:指向成员函数所作用的对象
3 非静态成员函数中可以直接用this来代表指向该函数作用的对象的指针(见本工程thiszhizhen.cpp)
//
// this指针例子
//
#include <iostream>
using namespace std;
class Complex{
public:
double real, imag;
void Print(){
cout << real << "," << imag << endl;
}
// 构造函数后面跟了初始化列表,可以吧real初始化为r,imag初始化成i
Complex(double r, double i):real(r),imag(i){}
// 成员函数
Complex AddOne()
{
// this指针指向addOne成员函数所作用的那个对象
this->real ++; // 等价于 real++
this->Print(); // 等价于Print
return *this; // 返回addOne所作用的这个对象,必须使用到this指针,this指向addOne所作用的对象,*this等价于addOne所作用的那个对象
}
};
4 this指针作用:
eg:
class A{
int i;
public:
void Hello(){
cout << "hello" << endl;
}
// 编译器编译之后成员函数如下
void Hello(A* this){cout << "hello" << endl;}
// 会报错的写法
void Hello(){cout << i << "hello" << endl;}
// 编译器翻译之后 this是个空指针,所以this->i是错误的
void Hello(A* this){cout << this->i << "hello" << endl;}
};
int main(){
A* p = NULL; // 定义空指针 p没有指向任何对象
p->Hello(); // 空指针去调用Hello(),让Hello作用在p所指向的那个对象上面,实际运行程序不会出错
}
// p->Hello() 被编译器翻译之后如下 Hello(p);
5 this指针和静态成员函数
静态成员函数中不能使用this指针!因为静态成员函数并不具体作用于某个对象!因此,静态成员函数的真实的参数的个数,就是程序中写出的参数个数!