首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

C++类中关键词this的含义【指向当前对象的指针】

  • 25-03-05 03:28
  • 3618
  • 6368
blog.csdn.net

this 关键字的含义

在 C++ 中,this 是 指向当前对象的指针。它存在于所有非静态成员函数中,指向调用该成员函数的对象。


1. this 的基本概念

class MyClass {
public:
    void show() {
        std::cout << "Address of this object: " << this << std::endl;
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
int main() {
    MyClass obj1, obj2;
    
    obj1.show();  // 输出 obj1 的地址
    obj2.show();  // 输出 obj2 的地址
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

✅ 解析:

  • this 指针存储了当前对象(即调用 show() 的对象)的内存地址。
  • obj1.show() 中的 this 指向 obj1,obj2.show() 中的 this 指向 obj2。

2. this 主要用途

(1) 解决成员变量和局部变量重名

class MyClass {
private:
    int value;
public:
    void setValue(int value) { // 形参和成员变量同名
        this->value = value;  // 使用 this 访问成员变量
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

✅ 解析:

  • this->value 表示类的成员变量 value。
  • value(不带 this->)是形参,二者名称相同时,this-> 让编译器区分它们。

(2) 链式调用

class MyClass {
private:
    int value;
public:
    MyClass& setValue(int v) {
        value = v;
        return *this; // 返回当前对象的引用
    }

    void show() {
        std::cout << "Value: " << value << std::endl;
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
int main() {
    MyClass obj;
    obj.setValue(10).show(); // 链式调用
}
  • 1
  • 2
  • 3
  • 4

✅ 解析:

  • setValue() 返回 *this(即当前对象的引用)。
  • 这样可以连续调用 obj.setValue(10).show();。
  • 关于引用的概念见 http://iyenn.com/rec/1709347.html 【与这里强相的内容请搜索“函数返回值为引用类型的定义”】

(3) 在类方法中返回当前对象的指针

class MyClass {
public:
    MyClass* getThis() {
        return this;
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

✅ 解析:

  • getThis() 返回当前对象的地址。

(4) this 不能用于静态成员函数

class MyClass {
public:
    static void staticFunc() {
        // std::cout << this;  ❌ 错误
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

✅ 解析:

  • staticFunc() 是静态成员函数,它不依赖具体对象,所以不能使用 this。

总结

  1. this 是一个指向当前对象的指针,只能用于非静态成员函数。
  2. 主要用途:
    • 解决成员变量和形参重名
    • 实现链式调用
    • 返回当前对象的指针
  3. 静态成员函数 不能使用 this,因为它们不属于某个具体对象。

这样,你在 C++ 编程中遇到 this 关键字时,就能快速理解它的用途了! ?

昊虹嵌入式技术交流群
QQ群名片
注:本文转载自blog.csdn.net的昊虹AI笔记的文章"https://blog.csdn.net/wenhao_ir/article/details/145512865"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top