C++:浅析this指针你确定不来看看吗?

it2026-02-28  2

this指针的原理是一个很复杂的问题,本篇就一起深入探讨this指针。 this指针的引入 首先我们来看一个简单的日期类:

#include <iostream> using namespace std; class Date { public: void Display() { cout << _year << "-" << _month << "-" << _day << endl; } void SetDate(int year,int month,int day) { _year = year; _month = month; _day = day; } private: int _year; int _month; int _day; }; int main() { Date d1, d2; d1.SetDate(2020, 10, 22); d2.SetDate(2020, 10, 22); d1.Display(); d2.Display(); }

在Date类中定义两个成员函数,成员函数中定义了相同的变量,当变量名重复时,我们想要使用类中定义的变量,想要正确的进行调用,这时应该怎样解决呢? 通过引入了this指针解决这样的问题,编译器设置了隐藏参数的this指针,让指针指向当前对象,所有函数体中对于成员变量的操作都是通过该指针去进行访问,(编译器将自动完成则这样的操作)

我曾阅读到关于this指针的一个经典回答: 当你进入到一个房子后,你可以看见桌子,椅子,地板等, 但是房子却不能看到全貌了。 对于一个类来说,你可以看到它的成员函数,成员变量, 但是实例本身呢? this是一个指针,它时时刻刻指向这个这个实例本身。

看到这个回答就感觉明晰了许多,class类就相当于一把钥匙,通过钥匙打开了这座房子的门,那么房子中所有的东西都可以被使用了。

什么是this指针? this指针是指向实例化对象本身时的一个指针,其中存储的是本身的地址,里面存储的是对象本身的地址,通过该地址可以访问内部的成员函数和变量。 this指针的特性

this指针的类型:类类型*const只能在成员函数的内部使用this指针本质上其实是一个成员函数的形参,将对象地址作为实参传递给this形参,所以对象中也不存储this指针;传递方式:this指针是成员函数死一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递;this在成员函数的开始前构造,在成员函数的结束后清除

this指针的使用

在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;当参数与成员变量名相同时,如:this->n = n (不能写成n = n)。
最新回复(0)