对于类 Entity 来说,this 就是一个
Entity* const
的指针,这意味着 this 不能被随便修改。在常函数种,this 是一个const Entity* const
的指针,意味着不能修改其他的任何值
1.解决类的变量命名冲突⭐⭐⭐¶
class Box {
int length; // 定义私有的整型成员变量length
public:
void setLength(int length) {
this->length = length; // 使用this指针访问成员变量length并将参数length的值赋给它
//或者(*this).length = length;
}
};
2. 链式调用 b.setLength(10).setWidth(5).display();¶
链式调用是一种编程技巧,可以使代码更加紧凑和易读。它通过在每个成员函数中返回 *this
,使得多个成员函数调用可以在同一行内连续进行。
class Box {
int length, width; // 定义私有的整型成员变量length和width
public:
Box& setLength(int length) { // 返回一个指向当前对象的引用
this->length = length; // 将传递的参数 length 赋给成员变量 length
return *this; // 返回指向当前对象的引用
}
Box& setWidth(int width) { // 返回一个指向当前对象的引用
this->width = width; // 将传递的参数 width 赋给成员变量 width
return *this; // 返回指向当前对象的引用
}
void display() { // 定义成员函数 display
std::cout << "Length: " << length << ", Width: " << width << std::endl; // 输出成员变量 length 和 width 的值
}
};
// 使用示例
Box b;
b.setLength(10).setWidth(5).display(); // 链式调用 setLength, setWidth, display 函数显示结果
3. 拷贝构造函数和赋值操作符(防止自赋值)¶
this
指针在拷贝构造函数和赋值操作符中也扮演着重要的角色。在这些函数中,我们通常需要检查传入的对象是否就是当前对象(即,是否是自我赋值)。如果是,则应避免进行可能导致错误的自我赋值。
class Box {
int* data; // 定义私有指针成员变量 data
public:
// 赋值运算符重载函数
Box& operator=(const Box& other) {
if (this != &other) { // 防止自赋值的情况
delete[] data; // 释放旧内存
data = new int[10]; // 重新分配内存
std::copy(other.data, other.data + 10, data); // 拷贝数据
}
return *this; // 返回一个指向当前对象的引用
}
};