C++之this指针

news2024/12/24 0:38:56

this指针到底是什么?

this 实际上是成员函数的一个形参,在调用成员函数时将对象的地址作为实参传递给 this。不过 this 这个形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器默默地将它添加到参数列表中。

我们操作一个对象时,编译器怎么知道我们操作的是哪个对象呢?

实际上,编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问。

例如

//在成员函数内
void show()
{
    cout<<i<<endl;
    //实际上编译器处理后:cout<<this->i<<endl;
}

实际上

  • this 作为隐式形参,本质上是成员函数的局部变量,所以只能用在成员函数的内部,并且只有在通过对象调用成员函数时才给 this 赋值;

  • this指针是类的指针,指向对象的首地址

  • this指针只能在成员函数中使用

  • this指针在成员函数的开始执行前构造的,在成员的执行结束后清除

下面做出演示

#include<iostream>
using namespace std;
class Object
{
private:
    int _a;
    int _b;
public:
    Object(int a, int b) :_a(a), _b(b) {}
    void show_this()
    {
        cout << "this =" << this << endl;
    }
    ~Object() {}
};
void test()
{
    Object obj1(1, 2);
    cout << "&obj1=" << &obj1 << endl;
    obj1.show_this();
    cout << "=========" << endl;
    Object obj2(1, 2);
    cout << "&obj2=" << &obj2 << endl;
    obj2.show_this();
}
void test1()
{
    Object obj1(1, 2);
    cout << this << endl;
}
int main()
{
    //test();
    //test1();
    return 0;
}

test()运行结果

这里我们发现this其实就是指向对象首地址的指针

test1()运行结果报错,

this的使用

当我们想要返回对象本身的时候,就直接return *this;

例如在深拷贝时候,会进行检查,如果是对自身的拷贝,则直接返回。

Person& Person::operator=(const Person& p)
{
    if (this == &p)    //检查是否是对自身的拷贝
        return *this;
    delete m_Height;
    m_Height = new int(*p.m_Height);
    return *this;
}

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

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

相关文章

Hadoop配置手册1:hadoop环境搭建与测试

Hadoop配置手册1 Date: September 25, 2022 第1章 hadoop环境搭建 1.1 安装Vmware软件 下载地址&#xff1a;https://www.onlinedown.net/soft/45831.htm 运行安装程序&#xff0c;并连续点击下一步安装 输入密钥&#xff0c;启动程序 详细参考&#xff1a;https://blog.csd…

2023年19个数学建模竞赛重磅来袭!!!

更新时间&#xff1a;2022年2月3日 本人的团队全是计算机的研究生&#xff0c;从本科到研究生有丰富的打比赛和数模的经验&#xff0c;有需要指导的&#xff0c;请私信我 相关链接 &#xff08;1&#xff09;【数学建模】2022年整年所有数学建模竞赛时间表 &#xff08;2&a…

再过半小时,你就能理解Kafka的基本原理了

kafka总结一.定义二.基础架构及术语三.工作流程分析3.1发送数据3.2保存数据3.2.1 partition结构3.2.2 message结构3.2.3 存储策略3.2.4 消费数据一.定义 Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;可以处理消费者规模的网站中的所有动作流数据&#xff0c;具有…

基于 PyTorch 的目标检测(YOLO实现)

目标检测是一个直到最近才开始逐渐被征服的挑战。解决这个问题对于自动化和自动驾驶来说是至关重要的。对解决办法的追求导致了各种方法的发展。我想要描述一些主要的方法&#xff0c;在过去的21目标检测已经被使用&#xff0c;然后讨论 Yolov3的实现。讨论方法引言虽然深度学习…

windows 7 离线安装vs20219,GraalVM 打包java成可执行程序

环境准备 由于vs2022不支持windows 7 &#xff0c;故用vs2019版。 如果是 win7 系统&#xff0c;在安装下载的依赖项前需要安装 win7 所需要的两个补丁 KB4490628和KB4474419 &#xff0c;下载地址分别为&#xff08;下载后直接安装即可&#xff09;&#xff1a; 参考这篇博客…

vite --- 搭建开发环境

目录 下载安装和初始化VSCode 安装Node.js yarn 使用 pnpm 安装与使用 搭建第一个Vite项目 使用 PNPM创建项目 项目目录解读 下载安装和初始化VSCode 1、访问网站 Visual Studio Code - Code Editing. Redefined 2、选择平台版本 选择符合自己操作系统的安装包下载完毕…

接口测试及接口抓包常用的测试工具有哪些?

目录 接口 接口测试的重要性 常用抓包工具 01、F12 02、Fiddler抓包工具 03、Charles抓包工具 04、Firebug抓包工具 05、httpwatch抓包工具 06、Wireshark抓包工具 07、SmartSniff抓包工具 常用接口测试工具 01、Postman 02、Jmeter 03、RESTClient 04、WireMock…

655. 汽车大甩卖2 etiger.vip 答案

题目描述 有n辆车大甩卖&#xff0c;第i辆车售价a[i]元。有m个人带着现金来申请购买&#xff0c;第i个到现场的人带的现金为b[i]元&#xff0c;只能买价格不超过其现金额的车子。你是大卖场总经理&#xff0c;希望将车和买家尽量多地进行一对一配对&#xff0c;请问最多卖出多…

Qt 开发环境搭建

一、Qt下载与安装 1、qt下载网站https://download.qt.io/ 其中各个目录含义如下&#xff1a; 目录说明snapshots/预览版&#xff0c;最新开发测试的Qt库和开发工具online/在线安装源official_releases/正式发布版&#xff0c;是与开发版相对应的稳定版Qt库和开发工具&#x…

利用哨兵简化实现难度

首先先回顾一下链表的插入和删除&#xff0c;如果需要在一个结点p后边插入一个结点&#xff0c;那么只需要下边两行代码&#xff1a; new_node->next p->next; p->next new_node;但是当往链表插入第一个结点时候&#xff0c;上边的代码就不能用了。需要进行下边的处…

【vue2】vue框架学习前置必备基础知识

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;数组 | 字符串中常用方法、对象解构语法、function |箭头函数this指向、展开运算符、原型…

为了会做题而学习期权合约

基本术语 买入期权&#xff1a;按照固定价格购买特定物品的期权。卖出期权&#xff1a;按照固定价格出售特定物品的期权。执行价格&#xff1a;期权合约中约定的固定价格。到期日&#xff1a;在其后期权不再被执行的日期。欧式期权&#xff1a;期权只能在到期日当日被执行。美…

python带你采集热点事件,让你第一时间掌握全发展

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 开发环境: python 3.8: 解释器 pycharm: 代码编辑器 requests: 发送请求 parsel: 解析数据 jieba pandas stylecloud 实现流程: 一. 思路分析 找到数据来源 network 记录网页数据 请求 二…

windows下djaongo项目移植至centos7系统并启动

概述&#xff1a;在windows下开发完成的django项目需要移植至centos系统并启动。 文章目录1,在django项目目录下生成requirements.txt文件2,下载FileZilla安装并连接Linux系统3,本地传输文件至linux系统3.1,可用vim修改settings.py的参数4,安装requirements.txt依赖包5,启动项目…

pwn小白入门 装载 笔记

所看视频奉上&#xff1a;5、装载与汇编_哔哩哔哩_bilibili笔记如下&#xff1a;1.查看文件类型&#xff1a;file 文件名其中&#xff1a;add&#xff1a;文件名ELF&#xff1a;文件格式64-bit&#xff1a;64位LSB&#xff1a;端序 lsb&#xff1a;小端序 msb:大端序x86-64:架构…

sqlserver2012数据库,日志文件损坏修复

背景 服务器突然断电&#xff0c;导致数据库日志文件损坏&#xff0c;数据库无法启动。 本方案也同样适用于不小心删除数据库日志文件的情况。 相关报错 master数据库日志异常&#xff0c;导致数据库无法启动&#xff1a; 无法在数据库“master”(数据库 ID 为 1)的分配单元 …

windows下生成自签证书并配置到chrome

Windows自签证书生成工具&#xff1a;XCA – X Certificate and Key Management 简称&#xff1a;XCA 下载地址&#xff1a; https://github.com/chris2511/xca/releases 或者 http://sourceforge.net/projects/xca/files/latest/download 界面&#xff08;1.4.1版本&#xff0…

从0开始学python -19

Python3 字典 字典是另一种可变容器模型&#xff0c;且可存储任意类型对象。 字典的每个键值 key>value 对用冒号 : 分割&#xff0c;每个对之间用逗号(,)分割&#xff0c;整个字典包括在花括号 {} 中 ,格式如下所示&#xff1a; d {key1 : value1, key2 : value2, key3…

剑指Offer 第23天 数组中出现次数超过一半的数字 数组中数字出现的次数 I 数组中数字出现的次数 II(异或运算)

剑指 Offer 39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 来源&#xff1a;力扣&a…

Python自动化测试实战篇(2)unittest实现批量接口测试,并用HTMLTestRunner输出测试报告

代码已上传Python接口项目实战篇&#xff08;2&#xff09;源码 项目场景&#xff1a; 由于关于接口的测试用例任务越来越多&#xff0c;单纯靠人工手敲的方式输入和校验&#xff0c;速度上已经不能够满足项目的进行速度&#xff0c;而且都是针对登录的框框进行用例测试&…