📜  C++中的“ this”指针(1)

📅  最后修改于: 2023-12-03 15:14:03.323000             🧑  作者: Mango

C++中的“this”指针

简介

在C++中,每个对象都有一个指向自身的指针,这个指针叫做“this”指针。它是一个隐含的指针,在成员函数中可以直接使用,用来指向调用该函数的对象。

使用

在一个成员函数中使用“this”指针,可以用它来访问成员变量和成员函数。例如:

class MyClass {
public:
    void print() {
        std::cout << "this is object " << this << std::endl;
    }
};

MyClass obj;
obj.print();

上面的代码中,我们在MyClass类的print函数中使用了this指针来输出当前对象的地址。

需要注意的事项
this指针是常量指针

在C++中,this指针是一个常量指针,不能被修改。也就是说,不能将this指针赋值给另一个指针,并修改另一个指针的值。例如:

class MyClass {
public:
    void func() {
        int* ptr;
        ptr = this;  //错误!this指针是常量指针,不能被修改。
    }
};
静态成员函数中不能使用this指针

静态成员函数没有this指针,因为它们不属于任何对象。因此,在静态成员函数中不能使用this指针。

class MyClass {
public:
    static void func() {
        //错误!不能使用this指针。
        std::cout << "this is " << this << std::endl;
    }
};
在构造函数和析构函数中使用this指针

在构造函数和析构函数中也可以使用this指针。不过需要注意的是,在构造函数中,只能访问类的成员变量,而不能访问成员函数。因为在构造函数中,成员函数还没有被构造出来。

class MyClass {
public:
    MyClass() {
        std::cout << "this is object " << this << std::endl;
        this->value = 0;  //正确!访问成员变量。
        //this->func();  //错误!不能访问成员函数。
    }
    
    ~MyClass() {
        std::cout << "delete object " << this << std::endl;
    }
    
    int value;  //成员变量
};
其他用途

this指针还有其他用途,例如在函数参数中指定默认参数、实现拷贝构造函数和拷贝赋值运算符等。这些用途在此不再详述。

总结

在C++中,this指针是一个隐含的指针,它指向调用该函数的对象。使用this指针可以访问成员变量和成员函数。需要注意的是,this指针是一个常量指针,不能被修改,并且在静态成员函数中不能使用。此外,在构造函数和析构函数中使用this指针也需要注意。