跳转至

对于类 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;  // 返回一个指向当前对象的引用
    }
};