学习笔记:this指针的运用
在 C++ 中,this 指针是一个特殊的指针,它指向当前对象的实例。
在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。
定义一个类的对象,首先系统已经给这个对象分配了空间,然后会调用构造函数(说明:假设存在构造函数)。一个类有多个对象,当程序中调用对象的某个函数时,有可能要访问到这个对象的成员变量。而对于同一个类的每一个对象,都是共享同一份类函数。对象有单独的变量,但是没有单独的函数,所以当调用函数时,系统必须让函数知道这是哪个对象的操作,从而确定成员变量是哪个对象的。这种用于对成员变量归属对像进行区分的东西,就叫做this指针
this是一个隐藏的指针,可以在类的成员函数中使用,它可以用来指向调用对象。
当一个对象的成员函数被调用时,编译器会隐式地传递该对象的地址作为 this 指针。
友元函数没有 this 指针,因为友元不是类的成员,只有成员函数才有 this 指针。
下面的实例有助于更好地理解 this 指针的概念:
#include <iostream>
class MyClass {
private:
int value;
public:
void setValue(int value) {
this->value = value;
}
void printValue() {
std::cout << "Value: " << this->value << std::endl;
}
};
int main() {
MyClass obj;
obj.setValue(42);
obj.printValue();
return 0;
}
输出:
Value:42
实例解析
以上实例中,我们定义了一个名为 MyClass 的类,它有一个私有成员变量 value。
类中的 setValue() 函数用于设置 value的 值,而 printValue() 函数用于打印 value 的值。
在 setValue() 函数中,我们使用 this 指针来引用当前对象的成员变量 value,并将传入的值赋给它,这样可以明确地告诉编译器我们想要访问当前对象的成员变量,而不是函数参数或局部变量。
在 printValue() 函数中,我们同样使用 this 指针来引用当前对象的成员变量 value,并将其打印出来。
在 main() 函数中,我们创建了一个 MyClass 的对象 obj,然后使用 setValue() 函数设置 value 的值为 42,并通过 printValue() 函数打印出来。
通过使用 this 指针,我们可以在成员函数中访问当前对象的成员变量,即使它们与函数参数或局部变量同名,这样可以避免命名冲突,并确保我们访问的是正确的变量。
类中的成员函数的this指针形参
每个成员函数都有一个指针形参,他的名字是固定的,称为this指针,this指针是隐式的(构造函数没有this指针)。
2、编译器会对成员函数进行处理,在对象调用成员函数时,对象地址做实参传递给成员函数的第一个形参this指针。
3、this指针是成员函数的隐含的指针形参,是编译器自己处理的,我们不能再成员函数的形参中添加this指针的参数定义,也不能在调用时显示传递对象地址给this指针。
this指针是隐式的,不需要我们定义也不需要显式的传参,但他依旧是一个形参,因此this指针存在于栈上。
this 指针在成员函数的开始前构造,在成员函数的结束后清除,生命周期和其他函数参数一样。当调用一个类的成员函数时,编译器将类的指针作为函数的this参数传递进去。
构造函数中的new 对象形参(this)
相信大家有可能在构造函数中遇到这种:
Man::Man()
{
child Boy = new child(this)
}
这是因为在child的构造函数中需要传递一个参数,该类型和你当前的对象类型一致,这个参数就是你调用的这个对象(就近原则)的隐形地址