原文: https://beginnersbook.com/2017/08/cpp-this-pointer/

this指针保存当前对象的地址,简单来说,你可以说这个指针指向该类的当前对象。让我们举个例子来理解这个概念。

C++ 示例:this指针

在这里你可以看到我们有两个数据成员numch。在成员函数setMyValues()中,我们有两个与数据成员名称相同的局部变量。在这种情况下,如果要将局部变量值赋值给数据成员,那么除非使用this指针,否则您将无法执行此操作,因为除非您使用this,否则编译器将不知道您指的是对象的数据成员。这是必须使用this指针的示例之一。

  1. #include <iostream>
  2. using namespace std;
  3. class Demo {
  4. private:
  5. int num;
  6. char ch;
  7. public:
  8. void setMyValues(int num, char ch){
  9. this->num =num;
  10. this->ch=ch;
  11. }
  12. void displayMyValues(){
  13. cout<<num<<endl;
  14. cout<<ch;
  15. }
  16. };
  17. int main(){
  18. Demo obj;
  19. obj.setMyValues(100, 'A');
  20. obj.displayMyValues();
  21. return 0;
  22. }

输出:

  1. 100
  2. A

示例 2:使用this指针进行函数链式调用

使用this指针的另一个示例是返回当前对象的引用,以便您可以链式调用函数,这样您就可以一次调用当前对象的所有函数。在这个程序中需要注意的另一个要点是,我在第二个函数中增加了对象num的值,你可以在输出中看到它实际上增加了我们在第一个函数调用中设置的值。这表明链接是顺序的,对对象的数据成员所做的更改将保留以进一步链式调用。

  1. #include <iostream>
  2. using namespace std;
  3. class Demo {
  4. private:
  5. int num;
  6. char ch;
  7. public:
  8. Demo &setNum(int num){
  9. this->num =num;
  10. return *this;
  11. }
  12. Demo &setCh(char ch){
  13. this->num++;
  14. this->ch =ch;
  15. return *this;
  16. }
  17. void displayMyValues(){
  18. cout<<num<<endl;
  19. cout<<ch;
  20. }
  21. };
  22. int main(){
  23. Demo obj;
  24. //Chaining calls
  25. obj.setNum(100).setCh('A');
  26. obj.displayMyValues();
  27. return 0;
  28. }

输出:

  1. 101
  2. A