C++ this指针用法详解
在 C++ 类的成员函数内部,暗含着一个名字是 this 的指针,它指向的是调用当前成员函数的类对象。
举个简单的例子:
程序中分别输出 this 指针的值和 a 对象的地址,输出结果为:
this 指针是编译器负责维护的,不需要显式地定义,可以直接使用,并且不需要担心这个指针的指向是否正确。
接下来通过一个完整的示例,给大家演示 this 指针的常见用法。
定义一个类 Ball,用这个类来描述一个小球的移动,因此这个 Ball 类需要提供几个移动的函数 moveLeft,moveRight,moveDown 和 moveUp。
注意,静态成员函数是没有 this 指针的。此外,this 指针不允许被修改,它始终指向调用成员函数的对象。
this 指针在 C++ 编程中有着特定的用途和重要性,理解 this 指针的工作方式和使用场景能帮助我们更高效地编写代码。
举个简单的例子:
#include <iostream> class MyClass { public: void display() { printf("this 的值为 %p\n", this); }; }; int main() { MyClass a; a.display(); printf("a 的地址为 %p\n", &a); return 0; }main() 函数中定义了一个 MyClass 类对象 a,它调用了 display() 成员函数,那么在 display() 函数的内容就隐含着一个 this 指针,它指向的就是 a 对象。
程序中分别输出 this 指针的值和 a 对象的地址,输出结果为:
this 的值为 00D9F8EF
a 的地址为 00D9F8EF
this 指针是编译器负责维护的,不需要显式地定义,可以直接使用,并且不需要担心这个指针的指向是否正确。
接下来通过一个完整的示例,给大家演示 this 指针的常见用法。
定义一个类 Ball,用这个类来描述一个小球的移动,因此这个 Ball 类需要提供几个移动的函数 moveLeft,moveRight,moveDown 和 moveUp。
// 定义一个 Ball 类,用于描述小球的状态和移动 class Ball { public: // 构造函数,初始化小球的坐标 Ball(int x = 0, int y = 0) : x(x), y(y) {} // 输出当前位置 void displayPosition() { std::cout << "Ball is at (" << this->x << ", " << this->y << ")" << std::endl; } // 向左移动 Ball& moveLeft(int step) { this->x -= step; return *this; } // 向右移动 Ball& moveRight(int step) { this->x += step; return *this; } // 向下移动 Ball& moveDown(int step) { this->y -= step; return *this; } // 向上移动 Ball& moveUp(int step) { this->y += step; return *this; } private: int x; // x 坐标 int y; // y 坐标 };实例中,this 指针用在以下两个位置:
- 明确地访问成员变量:在各个成员函数内部,通过使用 this->x 和 this->y 明确地表明 x 和 y 是当前对象的成员变量。
-
方法链式调用:在 moveLeft()、moveRight()、moveUp() 和 moveDown() 函数中,通过返回 *this(当前对象的引用),我们允许方法的链式调用。例如
ball.moveLeft(2).moveUp(3);
。
总结
this 是一个指针,只限于在类的成员函数内部使用,它指向的是调用当前函数的类对象。注意,静态成员函数是没有 this 指针的。此外,this 指针不允许被修改,它始终指向调用成员函数的对象。
this 指针在 C++ 编程中有着特定的用途和重要性,理解 this 指针的工作方式和使用场景能帮助我们更高效地编写代码。