news 2026/9/24 5:43:52

16.this指针

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
16.this指针

生活例子(核心类比)

假设你是一家奶茶店的店员(对应类的成员函数),店里有很多顾客(对应类的对象):

  • 当顾客A对你说:“我要一杯珍珠奶茶”,你知道要把奶茶递给顾客A
  • 当顾客B对你说:“我要一杯柠檬水”,你知道要把柠檬水递给顾客B

这里的“我”,就相当于C++里的this指针——它帮你明确“当前服务的是哪个对象”。

放到C++里:

  • 类的成员函数就像“店员”,能处理“做奶茶”“递奶茶”这些操作;
  • 类的对象就像“顾客”,每个对象调用成员函数时,函数需要知道“给谁服务”;
  • this指针就是函数里的“当前顾客标识”,明确告诉函数:你现在操作的是这个对象的成员。

极简代码理解

咱们写一个超简单的类,去掉复杂语法,只看this的核心作用:

#include <iostream> using namespace std; // 定义一个"人"的类(相当于奶茶店的服务规则) class Person { public: // 成员变量:每个人的名字(相当于顾客的需求) string name; // 成员函数:自我介绍(相当于店员的服务动作) void sayHello() { // this->name 就是"当前这个人"的名字 // 翻译成人话:"我是XXX",这里的"我"就是this cout << "我是" << this->name << endl; // 新手注意:平时写cout << "我是" << name << endl; 也能运行 // 因为编译器会自动把name变成this->name,this是"隐藏"的 } }; int main() { // 创建两个对象(两个顾客) Person zhangsan; zhangsan.name = "张三"; Person lisi; lisi.name = "李四"; // 调用成员函数(顾客找店员服务) zhangsan.sayHello(); // 输出:我是张三 → this指向zhangsan这个对象 lisi.sayHello(); // 输出:我是李四 → this指向lisi这个对象 return 0; }

必懂的3个关键(只记这3点就够了)

  • this是“隐藏的地址”
    你不用定义this,也不用传递它——编译器会自动帮你做。比如调用zhangsan.sayHello()时,编译器会偷偷把zhangsan的地址传给sayHello()里的this,所以this就指向了zhangsan
  • this最常用的场景:区分“重名”
    新手最容易遇到的问题:函数参数和成员变量名字一样,分不清谁是谁。比如:
class Person { public: string name; // 构造函数:参数名也是name,和成员变量重名 Person(string name) { // 错误写法:name = name; → 编译器不知道把谁赋值给谁 // 正确写法:this->name = name; // this->name = 当前对象的name(成员变量) // 等号右边的name = 函数参数的name this->name = name; } };
  • this只能在“非静态成员函数”里用
    简单记:只要函数前面加了static(静态函数),就没有this——因为静态函数是“类共用的”,不属于某个具体对象(比如奶茶店的“营业时间”公告,不是给某个顾客的,而是所有顾客都能看,所以不需要“当前顾客”)。

总结(新手版)

  1. this就是成员函数里的“当前对象标识”,告诉函数“你现在操作的是这个对象”,类比生活里的“我”;
  2. 不用手动创建this,编译器自动加,核心作用是区分重名的成员变量和参数;
  3. 只有非静态成员函数里能用到this,静态函数里没有。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/22 12:06:55

28.FPGA实验报告模板(串口为例)

一、实验概述 1. 实验目的 实现常用模块&#xff1a;串口模块&#xff0c;可以用来打印调试信息&#xff0c;可以通过上位机输入指令。 2. 实验环境&#xff08;开发板型号、EDA工具版本等&#xff09; 开发板型号&#xff1a;MLK-F20-CM02-4EV EDA版本&#xff1a; Vivado…

作者头像 李华
网站建设 2026/9/24 2:17:34

大模型应用之使用LangChain实现RAG(一)

LangChain介绍 2022年10月LangChain由 Lson Chase 创建&#xff0c;LangChain围绕 LLMs&#xff08;大语言模型&#xff09;建立&#xff0c;为各种 LLMs 实现通用接口&#xff0c;简化 LLMs 相关开发&#xff0c;方便开发者快速构建复杂的 LLMs 应用。 LangChain 是一个用于开…

作者头像 李华
网站建设 2026/9/23 1:26:33

基于Spring Boot的绥大学生学习平台管理系统的设计与实现

&#x1f345; 作者主页&#xff1a;Selina .a &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作。 主要内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据…

作者头像 李华
网站建设 2026/9/24 2:45:23

哪些招聘软件平台效果好?最新招聘平台权威排行

哪些招聘软件平台效果好&#xff1f;最新招聘平台权威排行在求职竞争日益激烈的当下&#xff0c;选择一个高效、真实、匹配度高的招聘平台&#xff0c;已成为职场人成功入职的关键一步。据《中国日报网》《新京报》等多家权威媒体2025—2026年报道&#xff0c;传统“海投简历”…

作者头像 李华
网站建设 2026/9/24 2:45:25

技术的便利,从来都不属于开发者

技术的便利&#xff0c;从来都不属于开发者 我们总被灌输一个共识&#xff1a;技术的发展是为了让人类更轻松。打开手机就能完成支付&#xff0c;点击鼠标就能部署应用&#xff0c;滑动屏幕就能连接世界——这些触手可及的便利&#xff0c;让每个人都能感受到技术迭代的温度。但…

作者头像 李华