C++——this指针

news2024/9/17 7:37:46

1.什么是this指针?

this指针是C++中的一个特殊指针,它指向当前对象的地址。在类的成员函数中,this指针可以用来访问当前对象的成员变量和成员函数。this指针的作用是区分同名的成员变量和局部变量,以及在成员函数中访问其他成员函数。
在这里插入图片描述

2.this指针的作用

this指针是一个隐含在每个非静态成员函数中的指针,它指向调用该成员函数的对象。this指针的作用主要有以下几个方面:

  1. 当一个对象调用其成员函数时,编译器会将该对象的地址作为隐含参数传递给成员函数,这个隐含参数就是this指针。通过this指针,成员函数可以访问对象的成员变量和其他成员函数。
  2. 在成员函数中,如果需要返回对象本身,可以使用this指针。通过返回*this,可以返回当前对象的引用。
  3. 在类的构造函数和析构函数中,this指针可以用来区分局部变量和成员变量。在构造函数中,this指针指向正在创建的对象;在析构函数中,this指针指向将要销毁的对象。
  4. 在类的成员函数中,如果有多个对象调用同一个成员函数,那么每个对象的this指针是不同的,可以通过this指针来区分不同的对象。
    下面是一个示例,演示了如何使用this指针:
class Person {
private:
    string name;
public:
    Person(const string& name) {
        this->name = name;
    }
    
    void printName() {
        cout << "My name is " << this->name << endl;
    }
};

int main() {
    Person p1("Mike");
    Person p2("Rivis");
    
    p1.printName(); // 输出:My name is Mike
    p2.printName(); // 输出:My name is Rivis
    
    return 0;
}

运行结果:
在这里插入图片描述
在上面的示例中,Person类的构造函数和成员函数printName都使用了this指针。构造函数使用this指针来区分局部变量name和成员变量name;成员函数printName使用this指针来访问成员变量name。通过this指针,可以在不同的对象中访问不同的成员变量。

3.在成员函数中使用this指针

在C++中,每个非静态成员函数都有一个隐式的指向当前对象的指针,称为this指针。通过this指针,我们可以在成员函数中访问当前对象的成员变量和成员函数。

例如,假设我们有一个名为Person的类,其中包含一个成员变量name和一个成员函数printName:

class Person {
public:
    void printName() {
        cout << "My name is " << this->name << endl;
    }

private:
    string name;
};

在printName函数中,我们使用this指针来访问当前对象的name成员变量。this->name表示当前对象的name成员变量。

4.this指针的限制

  1. 只能在非静态成员函数中使用
  2. 不能在全局函数中使用
  3. 不能在静态成员函数中使用
  4. 不能在构造函数的初始化列表中使用
  5. 不能在析构函数中使用
    注意:
    this指针只能在非静态成员函数中使用,不能在全局函数、静态成员函数、构造函数的初始化列表和析构函数中使用。这是因为this指针需要指向当前对象,而这些地方没有对象的概念或者对象的状态不适合使用this指针。

5.this指针的常见问题和注意事项

1.避免在构造函数中使用this指针
2.在成员函数中使用this指针
3.在静态成员函数中不能使用this指针
4.在友元函数中不能使用this指针
5.this指针的作用域是在类的非静态成员函数中

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

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

相关文章

C# PaddleOCR ch_PP-OCRv3 ch_PP-OCRv4测试

效果 未开启Onnx,V3 未开启Onnx,V4 开启Onnx,V3 开启Onnx,V4 项目 VS2022.net 4.8OpenCvSharp4 Sdcb.PaddleInference/2.5.0-preview.1 Sdcb.PaddleOCR/2.6.0.6-preview.1 代码 using OpenCvSharp; using Sdcb.PaddleInference; using Sdcb.PaddleOCR; using Sdcb.Paddle…

Spark—通过Java、Scala API实现WordCount案例的基本操作

实验原理 Spark的核心就是RDD&#xff0c;所有在RDD上的操作会被运行在Cluster上&#xff0c;Driver程序启动很多Workers&#xff0c;Workers在&#xff08;分布式&#xff09;文件系统中读取数据后转化为RDD&#xff08;弹性分布式数据集&#xff09;&#xff0c;然后对RDD在…

Centos7编译安装ffmpeg

1、准备工作&#xff0c;安装必要的环境 yum install autoconf automake bzip2 cmake freetype-devel gcc gcc-c git libtool make mercurial pkgconfig zlib-devel 2、创建目录 ffmpeg_sources 目录是下载软件包的目录 ffmpeg 目录是安装目录 mkdir /usr/local/ffmpeg_sour…

库表实验操作

目录 1、创建数据库Market&#xff0c;在 Market中创建数据表customers。​编辑 2、在Market中创建数据表orders。 3、创建数据库Team&#xff0c;定义数据表player。 1、创建数据库Market&#xff0c;在 Market中创建数据表customers。 &#xff08;1&#xff09;mysql>…

CentOS7下安装设置MySQL

CentOS7下安装设置MySQL 1.下载MySQL 1.1下载安装MySQL官方yum源配置 wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 1.2yum下安装MySQL yum -y install mysql57-community-release-el7-11.noarch.rpm 1.3安装MySQL服务器 yum -y install mysq…

一文讲解Linux上部署Web项目(war包)

一文讲解Linux上部署Web项目&#xff08;war包&#xff09; 生成war包 ​ 首先&#xff0c;我们要先将Web项目打成war包 ​ 连接Linux服务器 ​ 这里我们通过SSH客户端&#xff0c;连接远程Linux服务器&#xff0c;需要提前知道Linux的IP地址、登录用户名、密码等&#x…

zabbix基础5——screen屏幕展示、主机模板的使用、用户权限设置

文章目录 一、screen1.1 zabbix屏幕展示1.2 screen命令 二、zabbix模板2.1 创建模板2.2 复制模板2.3 模板导出2.4 模板删除2.5 模板导入 三、主机和主机组3.1 添加主机组3.2 导出主机模板3.3 导入主机模板 四、用户和用户组4.1 创建用户组4.2 创建用户4.3 用户权限设置 一、scr…

ETHERNET/IP 转ETHERCAT连接ethercat总线伺服如何控制

远创智控YC-EIP-ECT网关连接到ETHERNET/IP总线中做为从站使用&#xff0c;连接到ETHERCAT总线中做为从站使用&#xff0c;可以同时满足多种工业生产的需求。支持广泛的设备类型&#xff0c;可以和多种不同的设备进行通讯。 技术参数 ETHERNET/IP 技术参数 ● 网关做为 ETHERN…

LeetCode 方法整理(部分更新中)

1、迭代&#xff0c;链表反转 listNode prev null, next, curr head&#xff1b; while (curr ! null) {next curr.next;curr.next prev;curr next;prev curr;curr next; } return prev;2、递归&#xff0c;链表反转 /*// 两个节点时 head.next.next head; head.next…

苹果手机怎么设置日程安排提醒闹钟?简单几步

在忙碌的工作和生活中&#xff0c;我们经常会忘记重要的约会、会议和任务。这时候&#xff0c;一个可靠的日程提醒闹钟就显得尤为重要了。通过在手机上设置日程安排提醒闹钟&#xff0c;让我们不再错过任何重要的事情。 那么苹果手机怎么设置日程安排提醒闹钟&#xff1f; 敬…

硬件电路设计--运算放大器(一)参数和分类

文章目录 前言一、运放分类1.1 功能分类1.2 按单颗IC封装1.3 第一脚的判断 二、运放参数2.1 理想运放2.2 实际运放2.3 数据手册中的重要参数2.3.1 供电电压Vs&#xff08;power supply&#xff09;2.3.2 虚短虚断2.3.3 输入偏置电流Ib2.3.4 噪声Vn2.3.5 静态电流IQ2.3.6 输入失…

用户端Web测试方法与技术

目录&#xff1a; WEB 测试概念WEB 测试的价值WEB 测试学习路线WEB 基础知识html讲解javascript讲解css讲解web项目测试流程web测试设计思路web端常见bug解析Litemall购物车功能测试用例设计浏览器开发者工具web兼容测试策略Litemall购物车功能测试执行 1.WEB 测试概念 WEB…

【InnoDB 存储引擎】5.4.5 The Slow Query Log(慢日志实验)

文章目录 1 慢日志实验环境准备2 开始实验2.1 实验 1&#xff1a;超过查询时间相关慢日志并观察2.2 实验 2&#xff1a;不使用索引相关慢日志并观察2.3 实验 3&#xff1a;打印额外的慢日志信息2.4 实验 4&#xff1a;使用 mysqldumpslow 工具分析日志文件2.5 实验 5&#xff1…

《UNUX环境高级编程》(7)进程环境

1、引言 2、main函数 main函数的原型/*argc是命令行参数的数目&#xff0c;argv是指向各个指针所构成的数组*/ int main(int argc,char *argv[]);3、进程终止 有八种方式使进程终止。其中5种是正常&#xff0c;它们是&#xff1a; 从main函数返回调用exit调用_exit或_Exit最后…

看一看LRU与LFU

LRU&#xff08;Least recently used&#xff1a;最近最少使用&#xff09;和LFU&#xff08;Least frequently used&#xff1a;最不经常使用&#xff09;&#xff0c;两个都是以链表结构为基础&#xff0c;一般是作为缓存使用&#xff0c;当然&#xff0c;既然是缓存&#xf…

第六章:L2JMobius学习 – 源码讲解网络数据通信

本章节介绍客户端和服务器端的网络数据通信&#xff0c;使用的技术是Java NIO&#xff08;也就是套接字Socket&#xff09;。服务器端和客户端使用Socket通信的原因在于&#xff0c;它是双向的&#xff0c;持久的。也就是说&#xff0c;服务器端可以随时的向客户端发送数据&…

Tomcat7部署war包getshell 漏洞复现

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 验证方式03 利用方式04 修复方案 01 漏洞描述 Tomcat支持在后台部署war文件&#xff0c;可以直接将webshell部署到web目录下。其中&#xff0c;欲访问后台&#xff0c;需要对应用户有相…

pycharm如何给一串中文快捷加引号(方法一)

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 门前冷落鞍马稀&#xff0c;老大嫁作商人妇。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python白银群【此类生物】问了一个Pycharm基础的问题&a…

Linux文件管理常用命令补充

&#xff08;该图由AI绘制 关注我 学习AI画图&#xff09; 目录 一、查看文件内容 more分屏显示文件内容&#xff08;了解&#xff09; less分屏显示文件内容&#xff08;重点&#xff09; 二、文件统计命令 1、wc命令 2、du命令 三、文件处理命令 1、find命令 2、gr…

unity相机视角平移一段距离

using System.Collections; using System.Collections.Generic; using UnityEngine;public class ControlCamera : MonoBehaviour {//相机视角焦点平移一段距离//需求 相机视角 内的3D对象A 在视角内平移到屏幕C点 public Vector3 InitCameraPos;// Start is called be…