P27 C++this 关键字

目录

前言

01 this关键字的引入

02 this关键字


前言

本章的主题是 C++ 中的 this 关键字。

以前第一次学qt的时候就遇到了this关键字,那时候还不是很会C++,所以有点懵,现在我们就来讲解以下C++中的this关键字

C++ 中有一个关键字 this,通过它,可以访问成员函数。成员函数就是属于某个类的函数或者方法。

在方法内部,我们可以引用 this,this是一个指向当前对象实例的指针,该方法属于这个对象实例。

在 C++ 中,我们可以写一个方法,一个静态方法。为了调用这个方法,我们需要先实例化一个对象,然后调用这个方法,这个方法必须用一个有效的对象来调用,关键字 this 是指向该对象的指针。

这实际上对方法的一般工作方式非常重要,我们看看实际代码中的使用。

01 this关键字的引入

我们创建了一个名为 demo的类,它有一些公共字段 x 和 y,还有一个带参数的构造函数。然后使用成员初始化列表完成 x 和 y 的初始化。

这么做时没有问题的 

但如果我们不使用初始化列表,而是使用以前的方法,则会遇到一些问题。

上面的代码中,我们只是将变量的值赋值给自己,什么都没做。(可能有些编译器是没问题的,但是这样逻辑有点不清晰,而且也并不知道它打印了哪个xy)

02 this关键字

而我们真正想做的是引用这个类的 x 和 y,实际的类成员。this 关键字可以让我们做到这一点。

上面提到过,this 是指向当前对象的指针,将鼠标悬停在 this 上可以看到相关信息。

//测试代码
#include <iostream>class Demo
{
private:int x, y;public:Demo(int x, int y){this->x = x;this->y = y;std::cout << this->x <<this->y<< std::endl;}
};int main()
{Demo demo(1,2);return 0;
}

然后就可以使用 this 访问它指向的对象的成员了。

当然你也可以逆向引用它达到相同的目的,不过这样写更加清晰和简捷。

现在我们有了给 x 和 y 成员赋值的方法了,当前情况下,如果没有 this,就无法操作了。

还有一个需要注意的地方。

如果我们想要写一个返回这些变量之一的函数,后面加上 const 是很有必要的,因为它不会修改这个类。在这样的一个函数中,我们不能直接将 this 赋值给 Entity*,必须是一个 const Demo。

因为在函数后面写上 const,我们就不能修改这个类,所以 this 必须是 const 的,这样就会限制你做一些修改的事情。

另一个有用的场合是,如果我们想在类中调用这个类之外的函数(那就不叫类方法了,类的外部叫函数),而这个函数将 Demo类作为参数。那么我们想要传递这个 Demo类的当前实例到这个函数,那该怎么做呢?这个时候就要使用 this 了,这个应该不难理解

我们首先定义一个函数,名为print(),该函数有一个参数,就是一个Demo类的指针,如果我们想在类的内部调用它,那该如何传参呢?很简单,那就是用this关键字即可 

就是这样。

用于测试的代码

#include <iostream>void print(Demo *demo);class Demo
{
private:int x, y;
public:Demo(int x, int y) {this->x = x;this->y = y;std::cout << this->x <<this->y<< std::endl;print(this);}int getX() const { const Demo* demo = this;return this->x;}
};void print(Demo *demo)
{std::cout << demo->getX() << std::endl;
}int main()
{Demo demo(1,2);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/229826.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多种卫星遥感数据反演黑龙江省蒸腾与蒸散(ET)数据服务

引言 多种卫星遥感数据反演黑龙江省地表蒸腾与蒸散率&#xff08;ET&#xff09;产品是地理遥感生态网平台推出的生态环境类数据产品之一&#xff0c;产品包括1981-2023年数据&#xff0c;&#xff0c;数据类型为8bit整型。该产品经过数据搜集—模型模拟—质量检查—地表蒸腾与…

“前端已死”?从ChatGPT与低代码平台看未来编程之路

每隔一段时间&#xff0c;“前端已死”的论调就会如潮水般重新涌现&#xff0c;引发行业内外的热议。这种论调背后&#xff0c;除了对于新技术&#xff0c;如ChatGPT、GPT-4对前端开发者影响的担忧&#xff0c;还反映了人们对于技术变革的焦虑。 作为前端开发者&#xff0c;我坚…

数据预处理:随机裁剪放缩

随机裁剪放缩是一种数据增强技术&#xff0c;可以在训练神经网络时增加数据的多样性&#xff0c;提高模型的泛化能力。具体来说&#xff0c;随机裁剪放缩可以通过随机裁剪和缩放原始图片来生成多个不同的训练样本&#xff0c;从而增加数据集的大小和多样性。这种技术在图像分类…

小航助学题库蓝桥杯题库python选拔赛(23年8月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSD…

BOM浏览器对象模型

BOM(Browser Object Model) 浏览器对象模型 操作浏览器api和接口 1.打开链接 返回一个窗口对象 w window.open(url,"_blank",wi…

C++——取地址和自增运算

今天做了道题一下给我整蒙了&#xff0c;把实验探索发篇文章&#xff0c;题目如下&#xff1a; int a[]{10,11,12},*p&a[0];执行完*p;*p1;后a[0],a[1],a[2]的值各为多少 答案是 10, 12, 12怎么理解*p,*p1呢&#xff0c;我觉得可以用汉语把代码读一下&#xff0c;p&#xf…

SAP PI SFTP适配器发送方和接收方文件编码转换问题

Sender Adapter 发送方 PI默认是以UTF-8解析文件内容&#xff0c;当文件内容为日文或其他编码时&#xff0c;非英文、数字的内容解析结果将会是乱码&#xff0c;需要在PI中做以下设置。 Advanced页签->Advanced Mode中添加参数&#xff1a;encodingFormat MS932&#xff…

基于PaddleOCR银行卡识别实现(三)

前言 基于PaddleOCR银行卡识别实现&#xff08;一&#xff09; 基于PaddleOCR银行卡识别实现&#xff08;二&#xff09; 前两篇文章讲了检测模型和识别模型的实现&#xff0c;这一篇文章姗姗来迟&#xff0c;将讲解下两个模型的串联应用和PaddleOCR的源码精简&#xff0c;下面…

新手老师如何管理班级的日常工作

作为一名新手老师&#xff0c;管理班级的日常工作可能会是一项挑战&#xff0c;但以下是一些可能有用的建议&#xff1a; 建立良好的班级文化 班级文化是班级氛围的重要组成部分&#xff0c;对于学生的学习和成长具有重要影响。作为老师&#xff0c;要积极营造一种积极向上、团…

Jenkins 如何查看已经记录登录服务器的凭证密码

文章目录 一、背景描述二、解决方案一&#xff08;查看所有账号密码&#xff09;三、解决方案二&#xff08;查询指定账号密码&#xff09; 一、背景描述 在日常的开发过程中&#xff0c;有时候会出现忘记开发、测试服务器的登录密码的情况。此时恰巧 Jenkins 上记录了登录该主…

AI工具导航网站(包含写作、翻译、设计、论文润色去重的AI工具集)

人工智能工具导航网站集合了国内外各种热门、创意、有趣、前沿的AI工具盒网站&#xff0c;方便用户迅速访问和体验各种AI应用。 关注底部公众号回复"126899"获取工具集链接。 一、写作翻译编程设计AI工具集 AI写作工具&#xff1a;这些工具可以帮助用户生成或优化各…

Docker的基本概念和优势,以及在应用程序开发中的实际应用

文章目录 概要 基本概念 容器 (Container): 镜像 (Image): Dockerfile: 仓库 (Repository): 容器编排 (Orchestration): Docker Compose: Docker Daemon 和 Docker Client: 网络 (Network): 数据卷 (Volume): 主要优势 应用场景 小结 概要 Docker 是一种容器化平台&#xff0c;…