C++this指针
发布日期:2021-05-11 00:31:14 浏览次数:17 分类:精选文章

本文共 1599 字,大约阅读时间需要 5 分钟。

C++中的 this 指针与成员函数调用机制

在面向对象编程中,每个对象都有自己的数据成员,而所有对象共享同一套成员函数代码。然而,当主函数调用成员函数时,系统需要明确区分哪一个具体对象正在调用该函数。这就通过 this 指针来实现。


this 指针的作用

每次调用一个成员函数,this 指针接收一个隐藏的参数,即调用该函数对象的地址。当调用一个对象的成员函数时,隐式传递了一个指针方向的参数来初始化 this。例如:

class Person {public:    Person() {}    void display_this() {        cout << "this指针的地址:" << this << endl;    }private:    int m_age;};int main() {    Person p;    cout << "p的地址:" << p << endl;  // 输出对象地址    p.display_this();                   // 传递p的地址到this}

在以上代码中,p 是一个 Person 对象。当 p.display_this() 被调用时,this 指针将被设置为 p 对象的地址。


this 指针的特点

  • 常数指针

    this 是一个指针,始终指向当前对象,不会随对象移动或函数返回而改变指向。

  • 隐式传递

    在成员函数调用中,this 是隐式传递的,不需要显式地在函数定义中声明。


  • 常数成员函数

    如果你希望某个成员函数无法修改对象的数据成员,可以使用 const 关键字标记函数。在这种情况下,this 指针将被转换为常量指针:

    void display_this() const {    cout << m_age << endl;      // 隐式通过 this 访问 m_age    cout << "this指针的地址:" << this << endl;}

    如果尝试修改数据成员(如 m_age),则会引发编译错误,因为 this 是常量指针。


    ###返回 this 对象的函数

    某些成员函数会直接返回调用该函数的对象本身。这种函数通常名为 changemodify,如下:

    class Person {public:    Person(int n) {        this->m_age = n; // 初始化年龄    }    void display() const {        cout << m_age << endl; // 通过 this 输出当前对象的数据    }    Person& change_age(int n) {        this->m_age += n; // 修改当前对象的数据        return *this;       // 返回对象本身    }private:    int m_age;};int main() {    Person p(10);     // 创建一个 Person 对象,初始年龄为 10    p.change_age(10); // 修改年龄为 20    p.change_age(10); // 修改年龄为 30    p.display();       // 输出 30}

    在上述代码中,change_age 函数不仅修改了对象的数据,还直接返回了对象的引用。这样可以允许连续调用多个成员函数,而无需再次通过对象引用调用。


    ###总结

    this 指针通过将对象地址传递给成员函数,实现了“方法调用与对象绑定”的机制。每个成员函数都通过 this 指针了解当前调用对象,从而保证了对数据成员的正确访问和修改。这种机制是面向对象编程的核心,确保每个对象都能独立管理自己的数据。

    上一篇:C++静态成员详解
    下一篇:C++类和对象

    发表评论

    最新留言

    表示我来过!
    [***.240.166.169]2025年04月17日 19时08分23秒