区分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;
}

由上,可以得到两点

  1. this指针的类型可以理解为Pen*,对象的指针
  2. this指针的地址就是对应对象的地址
posted @ 2020-02-12 12:52  scyq  阅读(923)  评论(0)    收藏  举报