c++ this指针

1. 简介

在C++中,this指针是一个隐含的指针,它指向当前对象的地址。每个非静态成员函数都有一个this指针作为其隐含参数,用于访问调用该函数的对象。
当在一个类的成员函数内部使用成员变量时,编译器会自动将该成员变量解释为this->成员变量,其中this就是指向当前对象的指针。通过this指针,我们可以在成员函数中访问当前对象的其他成员变量和方法。

2.使用场景

2.1 解决构造函数中参数名和成员同名的情况

class XiuShi{
public:

    std::string name;
    int age ;

    XiuShi(std::string name , int age){
        this->name = name;
        this->age = age;
    }
   
};


int main() {

    XiuShi s("王腾",16);
    
    return 0;
}

2.2 返回当前对象,以便形成链式调用

类似于:

cout << "aa";
cout <<" bb";

cout << "aa" << "bb";

代码:

#include 
#include 

using namespace std;

class XiuShi{
public:

    string name;
    int age ;

    XiuShi(string name , int age) :name(name),age(age){
        
    }

    XiuShi xiuDao(){
        cout <<"修士在修道..." <<endl;
        return *this;
    }
    XiuShi youLi(){
        cout <<"修士在游历..." <<endl;
        return *this;
    }

};



int main() {

    XiuShi xs("王腾",16);

    xs.xiuDao().youLi();

    return 0;
}

也可以:

#include 
#include 


using namespace std;

class XiuShi{
public:

    string name;
    int age ;

    XiuShi(string name , int age) :name(name),age(age){

    }

    XiuShi* xiuDao(){
        cout <<"修士在修道..." <<endl;
        return this;
    }
    XiuShi* youLi(){
        cout <<"修士在游历..." <<endl;
        return this;
    }
    XiuShi* lianDan(){
        cout <<"修士在炼丹..." <<endl;
        return this;
    }

};



int main() {

    XiuShi xs("王腾",16);

    xs.xiuDao()->youLi()->lianDan()->xiuDao();

    
    return 0;
}

运行结果:

修士在修道...
修士在游历...
修士在炼丹...
修士在修道...

2.3 在每个成员函数(构造函数 | 普通的成员函数)里面,都包含这个this指针

#include 
#include 


using namespace std;

class XiuShi{
public:

    string name;
    int age ;

    XiuShi(string name , int age) :name(name),age(age){};
    
    XiuShi* xiuDao(){
        cout <<"修士在修道..." <<endl;
        return this;
    }
    XiuShi* youLi(){
        cout <<"修士在游历..." <<endl;
        return this;
    }
    XiuShi* lianDan(){
        cout <<"修士在炼丹..." <<endl;
        return this;
    }

    void riChang(){
        this->xiuDao()->youLi()->lianDan();
    }

};



int main() {

    XiuShi xs("王腾",16);

    xs.riChang();

    return 0;
}

运行结果:

修士在修道...
修士在游历...
修士在炼丹...

完整的示例代码:

#include 
using namespace std;

class MyClass {
private:
    int num;
public:
    void setNum(int num) {
        this->num = num;  // 使用this指针访问成员变量
    }
    
    int getNum() {
        return this->num;  // 使用this指针返回成员变量
    }
    
    void printAddress() {
        cout << "Object address: " << this << endl;  // 使用this指针打印对象地址
    }
};

int main() {
    MyClass obj1, obj2;
    
    obj1.setNum(10);
    obj2.setNum(20);
    
    cout << "obj1 num: " << obj1.getNum() << endl;
    cout << "obj2 num: " << obj2.getNum() << endl;
    
    obj1.printAddress();
    obj2.printAddress();
    
    return 0;
}

运行结果:

obj1 num: 10
obj2 num: 20
Object address: 000000354651FA34
Object address: 000000354651FA54

你可能感兴趣的:(c++,开发语言)