上节课的最后,我们提到:
静态成员函数没有 this 指针。
什么是 this 指针呢?在 C++ 中,this 是一个指向当前对象的指针,也就是对象指针。因此,在学习 this 指针之前,我们还需要先来了解一下对象指针。
对象指针
顾名思义,对象指针就是指向对象的指针。这个对象存储空间的首地址就是对象指针的值(关于指针的概念可以学习 C 语言指针)。
对象指针的声明形式如下:
类名 * 对象指针名
例如:
#include <iostream>
using namespace std;
// 定义 Person 类
class Person {
private:
int _age;
public:
void set_age(int age) {
_age = age;
}
int get_age() {
return _age;
}
};
int main() {
Person obj_1; // 定义一个 Person 对象
Person* ptr_1; // 定义一个 Person 指针
ptr_1 = &obj_1; // 将 obj_1 对象的地址传递给 ptr_1
return 0;
}
如果想要通过对象指针来访问对象中的成员可以采用以下两种方式:
-
对指针进行解引用操作:
(*ptr_1).set_age(18); cout << "年龄:" << (*ptr_1).get_age() << endl;需要注意的是,解引用运算符 * 的优先级低于
.,因此,为了提高 * 的优先级,需要把 *ptr_1 放在小括号中。 -
使用箭头运算符:
// 通过箭头运算符访问对象成员 ptr_1->set_age(20); cout << "修改后的年龄:" << ptr_1->get_age() << endl;
this 指针
在 C++ 中, this 是每一个非静态成员函数的一个形参,它指向调用该成员函数的对象。
不过 this 这个形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器将它添加到参数列表中。
this 指针最常见的用途是解决成员变量与函数参数同名的问题,此外它还可以用于在成员函数中返回对象本身。例如:
// 定义 Person 类
class Person {
private:
int age;
public:
void set_age(int age) {
this->age = age;
}
int get_age() {
return age;
}
};
在上面的代码中,当函数的参数 age 与类的成员变量 age 同名时,我们使用 this->age 来明确表示成员变量。