区分C++和Java的this
区分C++和Java的this
今天早上写C++程序的时候,我习惯性地在程序中写了如下代码
void setY(int x){
this.x = x;
}
编译器给我无情地报错了。后来想想,发现是自己基础不牢的问题,拍拍脑袋写下来了这篇博文。
上面的写法,Java程序员肯定不陌生。this关键字用于在类的内部访问内部成员,调用内部对象。C++同样也用this来访问。
但唯一的区别在于:在C++中,this是一个用于访问自己类地址的指针。友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针。
所以要用操作符->来访问内部成员,所以最开始那段代码放在C++中应该是
void setY(int x){
this -> x = x;
}
当然我们也有很多常见的骚操作,例如
#include <iostream>
using namespace std;
class Pen{
public:
Pen();
~Pen();
// 得到this的地址
Pen* get_add(){
return this;
}
};
int main(){
Pen pilot;
// 定义指针p接受对象Pen的成员函数get_add()的返回值
Pen* p = pilot.get_add();
cout << p << endl;
return 0;
}
由上,可以得到两点
- this指针的类型可以理解为Pen*,对象的指针
- this指针的地址就是对应对象的地址