关于C++ this指针你需要知道的

C++类的返回值是*this的成员函数 当C++类的成员函数其返回值是*this时,表示返回值是调用该成员函数的变量的引用。例如 classA { public: A& func1() { return*this; } int i{0}; } 此时,类A的成员函数func1的返回值是*this,该成员函数的返回值类型是A&。 1 返回值是左值 func1()函数的返回值是类型A的引用,该返回值是左值。也就是说,此时返回的是调用该函数的对象本身,通过该返回值可以调用该对象的其他成员函数或者对其他成员变量... 阅读详情

背景

上课讲到类的时候就简单提了一下,但是慢慢后面学习构造、析构、拷贝构造,再到后面重写String类的函数的时候,明显感觉自己对this指针理解的是在太过浅薄,因此回来补一下。
(书本上)this关键字:
用于区别局部变量和成员变量
只能在类成员函数中使用,指向调用该成员函数的对象

解释

在类中,用户自定义了一个class A,其中有成员变量和成员函数,当我们在主函数创建这个类的对象的时候就相当于是走进了A房间。在你进入房间后,你可以看见你曾经“买”回来的各种家具用品(成员变量和成员方法),但是房子A的全貌你已经看不见了。
this指针的作用就是可以永远指向这个类A。this的类型就是A *,对其返回return *this; 其实就是返回了类A类型的变量。

为什么会有this指针的出现

通常在class定义时要用到类型变量自身,因为这时候还不知道变量名(为了通用也不可能固定实际的变量名),就用this这样的指针来使用变量自身。
形如java定义student类时候写的get()和set()函数,其中就是因为在定义类的时候还不知道后面引用时会传入哪个变量。
“我用一个类 类型的指针指向成员变量,用以接收创建对象时候传过来的变量”

例子

java 中 写某个类的时候
public class student {
	int num;
	char name;
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public char getName() {
		return name;
	}
	public void setName(char name) {
		this.name = name;
	}
}


C++中写类的拷贝构造函数(深拷贝):
student(const student &s){
	num = s.num;
	this->name = new char[strlen(s.name) + 1];
	strcpy(this->name,s.name);
}

this的两个使用:

一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n)。

this指针记录每个对象的内存地址,然后通过运算符->访问该对象的成员

自抗扰控制(ADRC)原理与MATLAB实现详解 自抗扰控制(ADRC)是一种先进的鲁棒控制策略,其核心在于通过扩张状态观测器(ESO)实时估计并补偿系统总扰动。相比传统PID控制,ADRC不依赖精确数学模型,特别适合处理非线性、时变系统。从控制原理看,ADRC将系统内部动态和外部扰动统一建模,通过带宽参数化方法实现快速响应与强抗扰能力。在工程实践中,ADRC已成功应用于无人机飞控、伺服系统等场景,MATLAB仿真显示其上升时间可比PID提升46%,抗扰动恢复时间缩短60%。典型实现包含ESO设计、扰动补偿和PD控制三部分,参数整定遵循ω₀=3~5倍系统带 阅读详情

相关推荐

网工实验笔记:SNMP的配置

简单网络管理协议SNMP(Simple Network Management Protocol)是广泛应用于TCP/IP网络的网络管理标准协议。SNMP提供了一种通过运行网络管理软件的中心计算机(即网络管理工作站)来管理设备的方法。

2301_76170756的博客 2114

将成员函数的*this赋值给临时对象,两者地址是否相同的问题

关于后置单目运算符重载考虑到的*this赋值问题 问题描述 在函数 class A {… }; A A::operator++(int) { A a=* this; this->value++; return a; } int main() { A a(1); a++; a.show(); return 0; } 我们可以看到,此时value++作用的是调用重载运算符的对象的数据成员,而函数返回的则是我们创建的临时对象。按理说,第一步中,a只是接收了(*this)的值,生成了一个副本。但我们对th

pokemonn的博客 468

Layout常见错误汇总-不定时更

1、在做LVS时,出现中断错误 解决方法: 重新建立新的schematic和layout文件,对应好其中的元器件,同时两个文件的名字也要对应好“schematic”和“layout”,其他名字的话软件找不到如何对应。

weixin_38753095的博客 4万+

关于C++类中*this指针的理解

先要理解class的意思。class应该理解为一种类型,象int,char一样,是用户自定义的类型。(虽然比int char这样build-in类型复杂的多,但首先要理解它们一样是类型)。用这个类型可以来声明一个变量,比如int x, myclass my等等。这样就像变量x具有int类型一样,变量my具有myclass类型。 理解了这个,就好解释this了,my里的this 就是指向my的指针

GUI1259802368的博客 1469

Rockchip平台Android相机HAL3开发实战:从配置到调试全流程解析

本文深入解析了Rockchip平台Android相机HAL3的开发全流程。从理解AAL与PSL核心架构、解析关键配置文件(如camera3_profiles.xml和Tuning文件),到搭建编译环境、进行增量部署,并提供了系统日志分析、V4L2调试等高级问题排查技巧,为开发者提供了一套从配置到调试的实战指南。

docker7nomad的博客 843

晶圆表面缺陷检测现状概述

凹坑,凸起,尖角,沟槽),使用光束对晶圆进行照射,收集反射光和散射光信息进行缺陷判断,进一步可分为无图案晶圆表面检测和宏观缺陷检测设备。KLA使用SR-DUV光,检测精度在10nm以下。扫描电子显微(电子束和晶圆表面产生二次电子,X射线等)获取高分辨率的图像,然后用图像处理表面缺陷(凹坑,凸起,尖角,沟槽等)表面容貌和材料信息,分辨率可达5-10nm。晶圆表面缺陷检测设备主要检测晶圆外观呈现出来的缺陷,损伤、毛刺等缺陷,主要设备供应商KLA,AMAT,日立等,其中KLA在晶圆表面检测设备占有市场52%左右。

qq_36786800的博客 1万+

C++基础:this指针的概念,操作及特点

编译器针对程序员自己设计的类型分三次编译。 第一:识别和记录类体中属性的名称,类型和访问限定,与属性在类体中的位置无关。 如:class CGoods中的Name,Amount,Price,Total_value; 第二:识别和记录类体中的函数原型(返回类型+函数名+参数列表),形参的默认值,访问限定。不识别体函数。 第三:改写在类中定义的参数列表和函数体,改写对象调用成员函数的形式。 示例: #include<iostream> using namespace std; clas

weixin_58368590的博客 1921

【FLINK+Kerberos+kafka】在华为云上 bootstrap.server使用IP的GSS initiate failed 问题处理

目前互联网上所有的资料显示都是说没有正确设置KDC之类的,但本博主实际通过java代码低版本 如使用kafka-client 0.11.0 ,2.4.0等版本手动创建kafkaconfig 或者使用华为云的LoginUtils类 都能够正常链接,所以应该是高版本添加了相关配置,或者flink在subtask 创建kafkaAdminClient时 丢弃或使用了默认的一些配置行为,导致了客户端和kdc验证之间出现了principal 不一致导致验证失败。client.dns.lookup配置项作用。

honghanyue1791的博客 574

C++第三天:类与对象的初步认识,this指针

C++从开始到放弃第三天。 1.初步认识 C语言主要面向对象,关注的是过程,分析出求解的问题的步骤,通过函数调用逐步完成。 C++是基于面向对象的,关注的是对象,讲一件事情拆分为不同的对象,考对象之间的关系完成。 2.类的引入 C++中,结构体不仅可以定义变量,也可以定义函数。 3.类的定义 class Date { //类体:由成员函数和成员变量构成。 };//记得加分号 class为定义的...

l477918269的博客 210

在 SAP S/4HANA 本地部署和私有云里预览 RAP Travel App:为什么 ADT 发不出去,以及如何用 /IWFND/V4_ADMIN 正确发布 OData V4 Service

在SAP S/4HANA On-Premise/Private Cloud环境中,通过ADT直接发布RAP服务的本地端点常会失效。这是因为系统治理策略要求必须通过SAP Gateway Foundation(事务码/IWFND/V4_ADMIN)发布Service Group,而非开发者本机测试模式。本文详解了该流程的必要性:Service Group是OData V4服务的发布单元,涉及后端登记(/IWBEP/V4_ADMIN)和前端发布(/IWFND/V4_ADMIN)两个环节。提供了从ADT跳转SAP

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 268

昇腾AI原生创新算子挑战赛(S1赛季)复盘-LessEqual算子

【代码】昇腾AI原生创新算子挑战赛(S1赛季)复盘-LessEqual算子。

william_myq的博客 507

【c++】你可能不知道的函数形参和This 指针

由于工作繁忙,最近渐渐地变得少写博客啦~ 不过断不是会断的,就只能随便写写(水水)这样吧~ 因为工作需要用到C++,所以可能更多地写C++吧,其他也会写,只要看情况吧~ hiahiahiahia~ ——————————————下面是正文———————————————— 话不多说,先来看看一段功能为比较大小的代码: #include <iostream> ...

师兄怎么办 829

Cursor使用教程:用 Cursor 创建第一个 Java 项目

Cursor是一款基于VS Code的AI编程编辑器,专为开发者设计。安装前需确保JDK 8+、Maven 3.8+等环境配置,支持Windows系统。编辑器提供中文界面选项,可通过扩展市场安装语言包。创建Java项目支持手动和AI提示词两种方式:手动需创建目录结构并编写代码;AI方式则通过自然语言描述快速生成项目框架和代码。标准Java项目包含src/main/java主代码目录、src/test/java测试目录及pom.xml等配置文件。Maven项目中,pom.xml是核心配置文件,管理项目依赖与构

博客 3547

C++ 中的 this 指针:你不知道的 5 个小秘密!

C++ 中的 this 指针:你不知道的 5 个小秘密!

Henry313的博客 753

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C++ this指针(函数如何知道处理的是哪个对象的数据)

类要经过三次编译 第一次记录其数据成员;第二次记录其声明;第三次改写函数,把this指针加进去。 this指向当前类型对象的指针,并且自身是一个常性。 总结:this指针是类的成员函数里的一个属性,并不在对象里存在,当这个对象调动它的成员方法时,方法里由个参数是this。当成员方法调动完了,this指针自然而然没有了。 成员方法被调动,this才显现;成员方法不调动,不显现。并不是说对象里有this指针,this指针是当前本身对象的地址。 每个类的成员函数都将拥有一个this指针, ..

JiaQiao1997的博客 293

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

this指针的用法_C++ const用法,面试前你必须要知道主要用法。

本文主要介绍const修饰符在C++中的主要用法,下面会从两个方面进行介绍:类定义中使用const、非类定义中使用const1. 非类定义中使用const非类定义中使用const是指:在除了类定义以外的场景中使用const。1.1 变量const int a = 1; //定义一个常量,不可以修改int b = 2; //定义一个普通变量,可以修改const int &b = a; ...

weixin_28985877的博客 205

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C++——类和对象中的隐藏参数(this指针)

1、this指针的引出 #include<iostream> using namespace std; #include<string.h> #pragma warning(disable:4996) class Student { private: char _name[20]; char _gender[3]; int _age; public: void SetStudentInfo(const char* name, const char* gender, int

m0_46657980的博客 1293

this指针简单应用,包学包会

Dog & setName(string name) { // 参数和成员变量同名,注意这里是Dog &,一定要&引用。// 用this->name表示成员变量。void setName(string name) { // 参数和成员变量同名。// 某个需要传入Dog指针的函数。dog1.Dog("阿黄“).Dog("阿辉”)} /链式调用。指针就相当于这个"我"的概念——它让对象知道"现在操作的是我自己"。

wfcts12的博客 419

c++中this指针的作用

this 指针是一个隐含指针。它指向正在调用成员函数的那个对象实例。 其中有一个成员函数 int get_age;取得年龄的数值;在主程序中调用成员函数: 第6行 age = dog1.get_age();调用成员函数int get_age(),此时内部隐含的this指针指向了dog1这个实例; 其实在程序的第3行,用类名Cdog定义实例dog1和dog2的时候,编译器已经给实例dog1分配了内存,这个内存的首地址,编译器是知道的;在第6行age = do............

gebiwanglaowu的博客 1342

C++this指针----看这篇就够了

介绍 在C++中,成员变量和成员函数是分开存储的,每一个非静态成员函数只会诞生一份函数实力,也就是说多个同类型的对象会共用这一个函数,那么当代码需要调用对象自己的时候,要怎么去区分那个对象是自己的呢? C++通过特殊的对象指针,this指针,解决了上述问题,this指针指向被调用成员函数所属的对象 听到这里如果很懵,没有关系,下面我们给出例子进行理解: 比如有以下代码 class Person { public: //默认构造函数 Person() { } //拷贝构造函数 Person(co

qq_55783740的博客 417

C++ this指针

this 指针 引言: 首先,我们都知道类的成员函数可以访问类的数据(限定符只是限定于类外的一些操作,类内的一切对于成员函数来说都是透明的),那么成员函数如何知道哪个对象的数据成员要被操作呢,原因在于每个对象都拥有一个指针:this指针,通过this指针来访问自己的地址。 注意: this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。this指针的类型取决于...

好学者的博客 6万+

C++:this指针详解

本篇关于this指针的内容就到这里了,希望对各位有帮助,如果有错误欢迎各位指出。运行下面两串代码,会发现两个代码虽然只差了一行代码,结果却差别很大。C++实现stack代码。C实现stack代码。

2401_86551514的博客 2638

C++的this指针【定义、用法、本质、特点】

一、this指针的定义及用法 我们知道在C++中成员变量和成员函数是分开存储的,每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码。 那么问题是:这一块代码是如何区分哪个对象调用自己的呢? C++通过提供特殊的对象指针,this指针,解决上述问题。this指针指向被调用的成员函数所属的对象 this指针是隐含每一个非静态成员函数内的一种指针,this指针不需要定义,直接使用即可。 this指针的用途: 当形参和成员变量同名时,可用this指针来区分 在类的非静态成

马小超 2万+

【C++ | this指针】一文了解C++的this指针

👉本文介绍了C++的this指针,为什么需要this指针,什么是this指针,怎么使用this指针。

wkd_007的博客 1890

【C++this指针详解】

C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量”的操作,都是通过该 指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

小小小智_x0__0x_的博客 3011

C++的this指针

C++的this指针 当你进入一个房子后, 你可以看见桌子、椅子、地板等, 但是房子你是看不到全貌了。 对于一个类的实例来说, 你可以看到它的成员函数、成员变量, 但是实例本身呢? this是一个指针,它时时刻刻指向你这个实例本身。 C++在初始化对象时,每个对象中的数据成员都会得到系统分配的自己独立的存储空间。对于成员函数来说,一个函数的代码段在内存中只有一份,同一个类中的不同对象在调用自己的成...

物是人非,结局始终不美 1万+
上一篇: 总结最近学习成果17-统计字符串的各个字母有几个,并按字母表顺序输出
下一篇: 关于C++拷贝构造函数我想说
Rany010
博客等级 码龄9年 5粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值