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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

dockerfile文件:copy和add 异同

相同点&#xff1a; 复制文件或目录&#xff1a; 无论是 COPY 还是 ADD 都可以将文件或目录从构建上下文复制到容器中。支持源路径和目标路径&#xff1a; 两者都需要指定源路径和目标路径&#xff0c;用于指定要复制的文件或目录在主机上的位置以及在容器中的目标路径。 不同…

新生儿脐带护理的全面指南

引言&#xff1a; 新生儿脐带护理是父母在宝宝刚刚来到这个世界时面临的一项重要任务。正确的护理有助于预防感染&#xff0c;促进脐带迅速脱落&#xff0c;确保宝宝的健康。本文将深入探讨新生儿脐带护理的注意事项&#xff0c;为父母提供详尽的指南&#xff0c;以确保这个过…

10年码农经验分享:程序员接外包私活的6大平台和网站

关于程序员接私活&#xff0c;社会各界说法不一&#xff0c;如果你确实急用钱&#xff0c;价格又合适&#xff0c;那就去做。 程序员接私活已经是很平常的事情了&#xff0c;很多程序员&#xff0c;通过做私活承接项目&#xff0c;将自己的程序能力转化为收入。 不过&#xf…

【工具使用】Keil常用的调试操作整理介绍

目录 一、软件调试使用 1.1 基本调试操作 1.2 调试窗口 二、注意事项 一、软件调试使用 1.1 基本调试操作 上文已经说过在线调试和模拟调试的配置过程&#xff0c;但无论是在线还是模拟调试&#xff0c;调试技巧工具的使用都是一样的。 点击红色d&#xff0c;进入调试 可…

AtCoder Beginner Contest 330 A~F

A.Counting Passes(暴力) 题意&#xff1a; 给定 n n n个学生的分数&#xff0c;以及及格分 x x x &#xff0c;问多少人及格了。 分析&#xff1a; 暴力枚举&#xff0c;依次判断每个学生的分数即可。 代码&#xff1a; #include <bits/stdc.h> using namespace s…

Wordpress自动定时发布怎么开通-Wordpress怎么自动发布原创文章

在当今数字化时代&#xff0c;博客已经成为许多人分享观点、经验和知识的重要平台。然而&#xff0c;对于博主们来说&#xff0c;每天按时发布一篇又一篇的文章可能是一项具有挑战性的任务。为了解决这个问题&#xff0c;一些创新的工具应运而生&#xff0c;其中包括WordPress的…

Doris_Doris导入常见问题

Doris数据导入错误 &#xff1a;the length of input is too larger than schema 可能原因&#xff1a;varchar长度设置过短 Doris表字段乱序 导入palo表中的csv本身无schema信息&#xff0c;csv与palo表字段顺序必须一致&#xff0c;否则会错乱 Doris数据文件中字段比表字段…

每日一练:约瑟夫生者死者小游戏

1. 问题描述 约瑟夫问题&#xff08;Josephus problem&#xff09;是一个经典的数学和计算机科学问题&#xff0c;源于犹太历史学家弗拉维奥约瑟夫斯&#xff08;Flavius Josephus&#xff09;的著作《犹太战记》。问题的描述如下&#xff1a;   在这个问题中&#xff0c;有n…

民营五百强企业——利群集团的数字化转型升级实践:全集团统一办公,低代码构建应用

利群集团是一家跨地区、多业态、综合性的大型商业集团。多年来&#xff0c;利群集团在坚持以零售连锁和商业物流配送为主业的同时&#xff0c;积极同步发展多业态。在酒店连锁、药品物流和药店连锁、房地产开发、电子商务、文化投资、进出口贸易、跨境电商、金融、快递、矿泉水…

查看mysql 或SQL server 的连接数,mysql超时、最大连接数配置

1、mysql 的连接数 1.1、最大可连接数 show variables like max_connections; 1.2、运行中连接数 show status like Threads_connected; 1.3、配置最大连接数&#xff0c; mysql版本不同可配置的最大连接数不同&#xff0c;mysql8.0的版本默认151个连接数&#xff0c;…

UDS 相关时间参数

文章目录 UDS 全部时间参数UDS 应用层诊断时间参数1、P2 Client P2 Server P2* Client P2* Server 图例2、S3 Client S3 Server 图例 UDS CNA-TP网络层时间参数1、N_As/N_Ar 图例2、N_Bs 图例3、 N_Br 图例4、N_Cs 图例N_Cr 图例 UDS 网络层流控制时间参数 UDS 全部时间参数 UD…

java 鸿鹄云商 SAAS云产品概述 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城免费搭建

【SAAS云平台】打造全行业全渠道全场景的SaaS产品&#xff0c;为店铺经营场景提供一体化解决方案&#xff1b;门店经营区域化、网店经营一体化&#xff0c;本地化、全方位、一站式服务&#xff0c;为多门店提供统一运营解决方案&#xff1b;提供丰富多样的营销玩法覆盖所有经营…

SquareCTF-2023 Web Writeups

官方wp&#xff1a;CTFtime.org / Square CTF 2023 tasks and writeups sandbox Description&#xff1a; I “made” “a” “python” “sandbox” “”“” nc 184.72.87.9 8008 先nc连上看看&#xff0c;只允许一个单词&#xff0c;空格之后的直接无效了。 flag就在当…

【linux】信号——信号产生

信号产生 1.预备知识2.信号产生2.1通过键盘发送信号2.2系统调用接口向进程发送信号2.3硬件异常产生信号2.4软件条件2.5总结 自我名言&#xff1a;只有努力&#xff0c;才能追逐梦想&#xff0c;只有努力&#xff0c;才不会欺骗自己。 喜欢的点赞&#xff0c;收藏&#xff0c;关…

Linux系统之一次性计划任务at命令的基本使用

Linux系统之一次性计划任务at命令的基本使用 一、at命令介绍二、at命令的使用帮助2.1 at命令的help帮助信息2.2 at命令的语法解释 三、at命令的日常使用3.1 立即执行一次性任务3.2 指定时间执行一次性任务3.3 查询计划任务3.4 其他指定时间用法3.5 删除已经设置的计划任务3.6 显…

windows环境下载安装Nginx并配置防火墙

1、下载Nginx Nginx官网 下载稳定版 2、下载之后&#xff0c;解压 3、启动Nginx&#xff0c;命令&#xff1a;start nginx 最小化该窗口 主要&#xff0c;不要关闭&#xff0c;如果关闭&#xff0c;表示nginx服务关闭了 4、测试是否启动成功 在浏览器中输入http://localhos…

独家揭秘!8种平面设计类型,你都了解吗?

当我们谈起平面设计时&#xff0c;大部分人可能会误以为平面设计只局限于处理二维&#xff08;2D&#xff09;元素&#xff0c;例如设计logo或海报等。这实际上是一个普遍的误解。事实上&#xff0c;平面设计的定义和应用范围要远远超越这个简单的概念。它更多的是采用各种平面…

YOLOv7独家原创改进:自研独家创新MSAM注意力,通道注意力升级,魔改CBAM

💡💡💡本文自研创新改进:MSAM(CBAM升级版):通道注意力具备多尺度性能,多分支深度卷积更好的提取多尺度特征,最后高效结合空间注意力 1)作为注意力MSAM使用; 推荐指数:五星 MSCA | 亲测在多个数据集能够实现涨点,对标CBAM。 在道路缺陷检测任务中,原始ma…

WPF前端实现人脸扫描动画效果

前言 本章实现的效果主要通过OpacityMask与LinearGradientBrush(径向渐变) 的组合应用来实现。最终实现效果如下: LinearGradientBrush线性渐变画刷 LinearGradientBrush其实很简单,我们只需要关注5个属性,使用这5个属性你就可以完成这个画刷几乎所有的变化。 属性介…

代码随想录算法训练营第36天| 435. 无重叠区间 763.划分字母区间 56. 合并区间

JAVA代码编写 435. 无重叠区间 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,2],[2,3],[3,4],[1,3]] 输出: 1 解释: 移除 [1,3] 后&#x…