> 文章列表 > C++中的this指针

C++中的this指针

C++中的this指针

目录

this指针的作用

如何使用this指针

this指针的使用注意事项

总结


在C++中,this指针是一个指向当前对象的指针。它是一个隐式参数,指向当前正在执行的成员函数的对象。在函数内部,可以使用this指针来访问对象的成员变量和成员函数。

this指针的作用

在C++中,每个对象都有自己的一份成员变量,这些成员变量存储在对象的内存空间中。当调用对象的成员函数时,需要使用this指针来访问对象的成员变量。

例如,假设我们有一个名为Person的类,其中有一个成员变量名为age。我们可以定义一个成员函数来获取这个成员变量的值,代码如下:

class Person {
public:int age;void getAge() {cout << "Age: " << age << endl;}
};

在这个例子中,getAge函数使用了this指针来访问age成员变量。this指针指向当前正在执行的对象,也就是调用getAge函数的对象。因此,this指针可以让我们在成员函数中访问对象的成员变量。

如何使用this指针

在类的成员函数中,可以使用this指针来访问对象的成员变量和成员函数。例如,我们可以修改上面的例子,使用this指针来访问age成员变量,代码如下:

class Person {
public:int age;void getAge() {cout << "Age: " << this->age << endl;}
};

在这个例子中,使用了this指针来访问age成员变量。this->age表示当前对象的age成员变量。

除了访问成员变量,this指针还可以用来调用成员函数。例如,我们可以定义一个成员函数来修改age成员变量的值,代码如下:

class Person {
public:int age;void setAge(int age) {this->age = age;}
};

在这个例子中,使用了this指针来访问age成员变量,并将其设置为传入的参数值。

this指针的使用注意事项

在使用this指针时,需要注意以下几点:

  1. this指针只能在成员函数中使用。在非成员函数中,this指针是无效的。

  2. this指针不能被修改。this指针是一个指针常量,指向不能被修改。

  3. 在成员函数中,可以省略this指针。如果成员函数中没有与对象的成员变量同名的局部变量,则可以省略this指针。

  4. this指针不能为空,在什么情况可能会传递给this空值呢?

class A
{ 
public:void PrintA() {cout<<_a<<endl;}
private:int _a;
};
int main()
{A* p = nullptr;p->PrintA();return 0;
}

当一个指向对象的的指针为空指针时,调用对象的成员函数时,这个阶段不会报错,因为类的成员函数是所有实例化对象共享一套成员方法,所以通过对象的指针调用成员函数时对象的指针p并不会解引用,在汇编层面只是call了PrintA的地址,所以不会报出编译错误,而是在指向PrintA时,cout<<_a<<endl其实是cout<<this->_a<<endl,此时是空指针的解引用操作,会导致程序运行崩溃,而不是报出编译错误。为了防止出现程序崩溃这种严重的失误,this指针一定不能为空。

总结

 this指针是一个指向当前对象的指针,在C++中非常重要。它可以让我们在成员函数中访问对象的成员变量和成员函数。在使用this指针时,需要注意指针的作用范围和指针的不可修改性。