c++ this指针的用法
时间: 2023-11-08 14:05:02 浏览: 44
this指针是一个指向当前对象的指针,它可以在类的成员函数中使用。当调用类的成员函数时,this指针会隐式地传递给成员函数,指向调用该函数的对象。
this指针的主要用途是解决成员变量与形参同名的情况下,进行区分和访问。通过this指针,可以显式地访问当前对象的成员变量和成员函数。
例如,假设一个类Person有成员变量name和age,以及一个成员函数printInfo用于打印姓名和年龄:
```cpp
class Person {
public:
void printInfo() {
cout << "Name: " << this->name << endl;
cout << "Age: " << this->age << endl;
}
private:
string name;
int age;
};
```
在printInfo函数中,可以通过this指针访问到当前对象的name和age成员变量。
相关问题
c++This指针及其应用
在 C++ 中,this 指针是一个隐含于每个非静态成员函数中的指针,它指向调用该函数的对象。
下面是一个示例:
```cpp
#include <iostream>
class MyClass {
public:
void printAddress() {
std::cout << "Address of this pointer: " << this << std::endl;
}
};
int main() {
MyClass obj1, obj2;
obj1.printAddress();
obj2.printAddress();
return 0;
}
```
输出:
```
Address of this pointer: 0x7fff5fbff6b7
Address of this pointer: 0x7fff5fbff6b6
```
在上面的示例中,我们定义了一个名为 MyClass 的类,并在其中定义了一个名为 printAddress 的成员函数,该函数输出 this 指针的地址。在 main 函数中,我们创建了两个 MyClass 对象 obj1 和 obj2,并对它们都调用了 printAddress 函数。输出结果显示,这两个对象的 this 指针指向的地址是不同的,这是因为它们是不同的对象。
this 指针的应用非常广泛,其中一个常见的用法是在成员函数中返回对象本身的引用,即 `return *this;`。这在编写链式调用的代码时非常方便,例如:
```cpp
class MyClass {
public:
MyClass& setValue(int value) {
this->value = value;
return *this;
}
MyClass& setName(const std::string& name) {
this->name = name;
return *this;
}
private:
int value;
std::string name;
};
int main() {
MyClass obj;
obj.setValue(10).setName("example");
return 0;
}
```
在上面的示例中,我们定义了两个成员函数 setValue 和 setName,它们都返回对象本身的引用,这样我们就可以使用链式调用来设置对象的值。在 main 函数中,我们创建了一个 MyClass 对象 obj,并对它使用了两个成员函数。
this指针的用法
this指针的主要用法是在类的成员函数中访问当前对象的成员变量和成员函数。具体来说,它有以下几种用法:
1. 在成员函数中访问成员变量:
```c++
class MyClass {
public:
void setX(int x) {
this->x = x;
}
private:
int x;
};
int main() {
MyClass obj;
obj.setX(10);
return 0;
}
```
在成员函数setX()中,我们使用了this指针来访问成员变量x。这里的this指针实际上指向了obj对象,因此可以通过this->x来访问obj对象的成员变量x。
2. 在成员函数中访问成员函数:
```c++
class MyClass {
public:
void func1() {
std::cout << "调用了func1函数" << std::endl;
this->func2();
}
void func2() {
std::cout << "调用了func2函数" << std::endl;
}
};
int main() {
MyClass obj;
obj.func1();
return 0;
}
```
在成员函数func1()中,我们使用了this指针来访问成员函数func2()。这里的this指针实际上指向了obj对象,因此可以通过this->func2()来调用obj对象的成员函数func2()。
3. 在成员函数中返回当前对象的引用:
```c++
class MyClass {
public:
MyClass& func() {
return *this;
}
};
int main() {
MyClass obj;
MyClass& objRef = obj.func();
return 0;
}
```
在成员函数func()中,我们使用了this指针来返回当前对象的引用。这里的this指针实际上指向了obj对象,因此可以通过return *this来返回obj对象的引用。
需要注意的是,在成员函数中使用this指针时,可以省略this->,直接使用成员变量或成员函数的名称来访问。但是,这样可能会与函数参数或局部变量的名称发生冲突,因此建议使用this指针来明确地表示访问的是成员变量或成员函数。