P27 C++this 关键字

news2024/11/20 20:19:17

目录

前言

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.coloradmin.cn/o/1269344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

致敬成长:借助昇腾AI,00后开发者如何破解睡眠呼吸辅助诊断难题

导读&#xff1a;两年&#xff0c;如何从AI小白到优秀开发者&#xff1f; 打呼噜正在成为人们身边隐形的“健康杀手”。据《2017年中国人睡眠质量及科普报告》显示&#xff0c;约5000万人在睡眠中发生过呼吸暂停。30~69岁成年人中&#xff0c;阻塞性睡眠呼吸暂停综合征&#xf…

Python接口自动化测试如何设计接口测试用例(详解)

简介 上篇我们已经介绍了什么是接口测试和接口测试的意义。在开始接口测试之前&#xff0c;我们来想一下&#xff0c;如何进行接口测试的准备工作。或者说&#xff0c;接口测试的流程是什么&#xff1f;有些人就很好奇&#xff0c;接口测试要流程干嘛&#xff1f;不就是拿着接口…

柯桥学英语,商务外贸英语,BEC中级写作冲刺干货

think of… as 把……认为 eager to… 渴望 look forward to Ving 期待/盼望…… accept…as 接受……为 be certain of 对……确信 in contact with 与……接触 in accordance with 与……相符/一致 remind…of 提醒……关于 be advantageous to 有利于…… assure…of使……放…

嵌入式八股 | 校招秋招 | 笔试面试 | 精选题目

欢迎关注微信公众号【赛博二哈】获取八股PDF 并加入嵌入式求职交流群。提供简历模板、学习路线、岗位整理等 欢迎加入知识星球【嵌入式求职星球】获取完整嵌入式八股。 提供简历修改、项目推荐、求职规划答疑。另有各城市、公司岗位、笔面难题、offer选择、薪资爆料等 嵌入式…

[ISCTF2023] Crypto/PWN/Reverse

最近新生赛还挺多&#xff0c;不过这个开始后注册页面就被删了&#xff0c;没注册上。拿别人的附件作了下。 Crypto 七七的欧拉 这题只给了n,e,c这种情况一般正常没法解&#xff0c;猜n不正常 import gmpy2 import libnum from crypto.Util.number import *flagbISCTF{****…

通过抖音商城小程序门店服务预约效果如何

抖音已然成为众多企业商家经营的重要平台之一&#xff0c;尤其本地生活服务商家更可通过抖音实现套餐销售、门店引流等&#xff0c;而借势平台高额流量&#xff0c;也确实有非常高的效果。 而在实际运营中&#xff0c;随着私域化程度加快&#xff0c;无论微信还是抖音&#xf…

英语不好,能够学习编程语言吗?

可以&#xff0c;编程英语是不涉及语法、时态、人称的&#xff0c;比如&#xff1a; System.out.print("你好");此处的&#xff0c;System表示"系统"&#xff0c;out表示"在…外面"&#xff0c;print表示"打印"&#xff0c;每一个单词…

App的测试,和传统软件测试有哪些区别?应该增加哪些方面的测试用例?

从上图可知&#xff0c;测试人员所测项目占比中&#xff0c;App测试占比是最高的。 这就意味着学习期间&#xff0c;我们要花最多的精力去学App的各类测试。也意味着我们找工作前&#xff0c;就得知道&#xff0c;App的测试点是什么&#xff0c;App功能我们得会测试&#xff0…

解决tomcat 启动 , 中文乱码问题

解决tomcat 启动 , 中文乱码问题. 第一步找到server.xml, 找到连接器, 添加 URIEncoding"UTF-8" 注意是英文的引号. 第二步, 找到 logging.properties , 在其中找到 第三步,启动服务, 观察现象,亲测有效.

【Java学习笔记】 74 - 本章作业

1.验证电子邮件格式是否合法 规定电子邮件规则为 1.只能有一个 2. 前面是用户名,可以是a-z A-Z 0-9 _ - 字符 3. 后面是域名&#xff0c;并且域名只能是英文字母&#xff0c;比如sohu.com或者tsinghua.org.cn 4.写出对应的正则表达式&#xff0c;验证输入的字符串是否为满…

PC端ssh连接到Android手机的Termux部署http服务器

1. 下载并安装Termux至Android手机 Releases termux/termux-app (github.com) https://github.com/termux/termux-app/releases 2. 手机端启动Termux&#xff0c;安装openssh #更新仓库 pkg up pkg install openssh #安装好后&#xff0c;启动sshd sshd问题1&#xff1a;如…

STM32g70开启定时器死机原因

在做低功耗产品时&#xff0c;检查发现由于之前开启了BOOTLOADER升级程序&#xff0c;修改了中断向量FALSH起始地址&#xff0c;只在KEIL TARGET IROM1中修改了&#xff0c; 而忘记在程序文件system_stm32f10x.c里修改中断向量表flash起始地址 system_stm32f10x.c里&#xff0…

去北京医院预约,需要医保卡号,但是社保卡不在身边,北京的医保卡号咋网上查询

目录 1 问题2 查询 1 问题 要去北京某一个医院预约挂号&#xff0c;预约的时候选择的医保&#xff0c;需要写医保卡号&#xff0c;但是自己的社保卡不在身边&#xff0c;怎么办 记住&#xff0c;医保卡号不是社保卡号&#xff0c;是不一样的 北京医保卡号是12位 2 查询 登陆这…

单片机中断系统的应用

中断系统是单片机中非常重要的组成部分&#xff0c;它是为了使单片机能够对外部或内部随机发生的事件实时处理而设置的。中断功能的存在&#xff0c;在很大程度上提高了单片机实时处理能力&#xff0c;它也是单片机最重要的功能之一&#xff0c;是我们学习单片机必须掌握的重要…

C++基础 -17-继承中 基类与派生构造和析构调用顺序

首先声明 定义了派生类会同时调用基类和派生的构造函数 定义了派生类会同时调用基类和派生的析构函数 那么顺序如何如下图 构造由上往下顺序执行 析构则完全相反 #include "iostream"using namespace std;class base {public:base(){cout << "base-bui…

从事涉密测绘业务的人员应当具有中华人民共和国国籍,签订保密责任书,接受保密教育。

1、从事涉密测绘业务并签署保密责任书的人员清单&#xff08;包括&#xff1a;姓名、身份证号码、工作岗位、责任书签署日期&#xff09; 2、近三年内&#xff08;或培训证书仍在有效期内&#xff09;接受过省级自然资源主管部门或者其它单位及部门组织的测绘地理信息安全保密政…

零代码编程:用ChatGPT批量设置Word文件格式

文件夹中有很多txt文本文件&#xff0c;要转换成word文件&#xff0c;且要批量设置一些文件格式&#xff0c;方便后续的打印。 文本文件如下&#xff1a; 在chatgpt中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个处理word内容的任务&#xff0c;具体…

YOLOV8解读及推理代码

YOLOV8解读及推理代码 YOLOV8前言性能对比新的骨干网络新的 Ancher-Free 检测头新的损失函数环境配置训练基于python脚本基于命令行 推理pt模型推理onnx模型推理 YOLOV8 前言 YOLOv8并非一个全新的目标检测网络&#xff0c;而是在YOLOv5的基础上进行了升级。其主要升级包括&am…

enote笔记法之附录2——5w1h2k关联词(ver0.22)

enote笔记法之附录2——5w1h2k关联词&#xff08;ver0.22&#xff09; 最上面的是截屏的完整版&#xff0c;分割线下面的是纯文字版本&#xff1a; 作者姓名&#xff08;本人的真实姓名&#xff09;&#xff1a;胡佳吉 居住地&#xff1a;上海 作者网名&#xff1a;EverSt…

裁员降薪如果影响到你,可能还是你的问题

1.摘要 今年以来,看到的裁员风波一茬接一茬,普遍的论调都是IT行业不行了, 总之就是一片哀嚎、惨不忍睹。最近身边的一些朋友也接连传出部门被优化、被裁员的消息, 说实话我自己也被这种寒意给触碰到, 每天也加强了自己的学习频率,甚至把回家路上的碎片时间也利用起来, 目的不在…