c++中this指针的意义和用法
c++中this指针的意义和用法
前言:在做作业的时候,看到了this指针,不知道是什么东西,于是查了一下,留一篇文章记录
this指针是什么?
在C++中,类里面的成员函数可以访问类的成员变量,但是有时候可能会有参数名和成员变量名相同的情况。这时候,可能需要用某种方式来区分它们。比如,在构造函数中,参数名如果和成员变量名一样,就需要用this指针来指定成员变量。也就是说,在类的非静态成员函数中,this指针指向调用该函数的对象实例。这样的话,通过this可以访问该对象的所有成员,包括成员变量和成员函数。
那具体什么时候会用到this呢?
1. 解决成员变量与参数名称冲突
当成员函数的参数名与类的成员变量名相同时,使用this->变量名
明确指向成员变量。
示例:1
2
3
4
5
6
7
8class MyClass {
private:
int x;
public:
void setX(int x) {
this->x = x; // 使用this消除歧义
}
};
2.链式调用(返回对象自身)
通过返回*this,支持连续调用同一对象的多个成员函数。
示例:
1 | class Counter { |
3. 防止自赋值
在赋值运算符重载中,检查this与待赋值对象地址是否相同,避免资源重复释放。
示例:
1 | class MyClass { |
4. 传递当前对象指针或引用
将对象自身传递给外部函数或作为回调参数。
示例:
1 | class Button { |
理解:
1. this的本质
类型:在类的非静态成员函数中,this的类型是ClassName(例如MyClass)。
指向目标:this指向调用该成员函数的对象实例(即具体的某个对象),而非“类”本身。
2. 为什么是“对象实例”而不是“类”?
类的成员函数属于类:类的成员函数代码在内存中只有一份,被所有对象共享。
对象的数据独立存在:每个对象实例有自己的成员变量存储空间。
this的作用:在调用成员函数时,this会隐式传递当前对象的地址,让函数知道要操作哪个对象的数据。
1 | class Dog { |
同一个bark()函数,通过不同的this指针,操作不同对象的数据。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Welcome To My-Blog!