C++——this关键字
在 C++ 中,this
关键字是一个指向当前对象的指针,它隐含在类的非静态成员函数中,用于标识当前正在操作的对象。
1.this
的作用
-
访问成员变量:当成员变量与函数参数同名时,用
this->
明确指向对象的成员。 -
链式调用:通过返回
*this
实现方法的连续调用(类似obj.method1().method2()
)。 -
传递当前对象:在函数中需要将对象自身作为参数传递时使用(例如回调函数)。
-
区分局部变量:明确代码意图,避免命名冲突。
2. 基础用法示例
场景 1:成员变量与参数同名
#include <iostream>
using namespace std; // 使用标准命名空间(注意:实际工程中不建议全局使用)
// 汽车类定义
class Car
{
private:
string brand; // 品牌(成员变量)
string type; // 车型(成员变量)
int year; // 生产年限(成员变量)
public:
// 构造函数(通过this指针初始化成员变量)
// 参数说明:
// brand - 要设置的品牌名称(与成员变量同名)
// type - 要设置的车型名称(与成员变量同名)
// year - 要设置的生产年限(与成员变量同名)
Car(string brand, string type, int year)
{
// 使用this指针区分同名的成员变量和参数
this->brand = brand; // 将参数brand赋值给当前对象的brand成员
this->type = type; // 将参数type赋值给当前对象的type成员
this->year = year; // 将参数year赋值给当前对象的year成员
};
// 声明打印函数(类内声明,类外实现)
void printFunc();
};
// 类外实现成员函数(必须使用作用域运算符::)
void Car::printFunc()
{
// 输出对象信息(访问的是成员变量)
cout << "品牌:" << brand
<< ",车型:" << type
<< ",年限:" << year << endl;
}
int main()
{
// 创建Car对象(调用构造函数初始化)
// 参数说明:
// "小米" - 初始化brand成员
// "SU7" - 初始化type成员
// 2025 - 初始化year成员
Car car("小米", "SU7", 2025);
// 调用成员函数打印信息
car.printFunc();
return 0;
}
场景 2:链式调用(返回 *this
)
#include <iostream>
using namespace std;
class Car
{
private:
string brand;
string type;
int year;
public:
// 带有参数的构造函数
Car(string brand, string type, int year)
{
this->brand = brand; // this->brand 表示car这个对象里面的brand成员变量
this->type = type;
this->year = year;
};
// 表示函数返回当前对象的引用
Car& setYear(int year)
{
this->year = year;
return *this; // 解引用this指针,得到当前对象本身。
}
// 打印函数
void printFunc();
};
// 在Car类外定义一个打印函数
void Car::printFunc()
{
cout << "品牌:" << brand << ",车型:" << type <<",年限:" << year << endl;
}
int main()
{
Car car("小米","SU7",2025);
car.printFunc();
// 链式调用
car.setYear(2024).printFunc(); // 这个引用会被链式调用中的后续操作接收,
// 确保所有操作作用于同一个对象。
return 0;
}
总结
-
this
的用途:-
解决成员变量与参数命名冲突。
-
实现链式调用(如
obj.method1().method2()
)。 -
在需要传递当前对象时使用(如回调、事件处理)。
-
-
关键规则:
-
只能在类的非静态成员函数中使用。
-
静态函数、全局函数中不可用。
-
通过合理使用 this
,可以提升代码的清晰度和灵活性,尤其在面向对象设计中非常实用。