c++ this指针的用法
时间: 2023-11-08 07:05:02 浏览: 234
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指针的用法
`this`关键字在C++中是一个特殊的隐含指针,它指向当前正在被调用的函数的自身实例。在成员函数内部,`this`提供了访问和操作对象本身数据成员的方法,特别是当你需要区分静态成员函数中的隐含参数和对象实例的数据时。
这里有一些`this`的常见用法:
1. **传递给成员函数**:当作为成员函数的一部分调用其他成员函数或使用成员变量时,通常需要显式地使用`this`。
```cpp
class MyClass {
void myMethod() {
this->otherMember();
}
};
```
2. **作为实参**:可以在非成员函数中接收`this`作为参数,用于操作特定的对象。
```cpp
void printMyValue(MyClass* obj) {
obj->myVariable = 42;
}
```
3. **访问对象属性**:通过`this`可以直接访问类的私有(private)或保护(protected)成员。
```cpp
class MyClass {
private:
int value;
public:
void setValue(int v) {
this->value = v; // 访问私有变量
}
};
```
4. **避免无意的全局作用域引用**:在没有明确上下文的情况下,`this`可防止函数误以为某个全局变量。
```cpp
MyClass globalObj;
void myFunc() {
if (someCondition) {
MyClass localObj; // 使用局部对象
} else {
globalObj.someMember(); // 明确指代哪个对象
}
}
```
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,并对它使用了两个成员函数。
阅读全文