c++的this指针

目录

this指针的工作原理

this指针的应用

const修饰的成员函数


this指针的工作原理

在c++中同一个类的不同对象,在内存中有不同的储存空间,但是成员函数在内存中只保存了一份,在调用函数处理成员数据时,this指针能保证该成员函数处理的是自己的成员数据。

#include <iostream>
#include <string.h>using namespace std;class Person
{public:int a;void show(){cout<< a << endl;}};int main()
{Person p;p.a = 100;Person p1;p1.a = 1000;p.show();//person * const this 对象调用函数 就将对象的地址传给this 访问this->areturn 0;
}

编译运行

类的成员函数默认编译器都加上了一个this指针,这个this指针指向调用该成员函数的对象

this指针的应用

#include <iostream>
#include <string.h>using namespace std;class Person
{public:Person(int age,string name){this->age = age;//p1的地址传给this指针 age赋值给了this指向的age name赋值给了this指向的namethis->name = name;}void show(){cout << age <<" "<< name << endl;}Person Person_add(Person &p2)//this指向p1 {Person p(this->age + p2.age,this->name + p2.name);return p;}int age;string name;};Person Person_add(Person &p1,Person &p2)
{Person p(p1.age + p2.age,p1.name + p2.name);return p;
}void test01()
{Person p1(10,"lucy");p1.show();
}
void test02()
{Person p1(10,"hello");Person p2(20,"world");Person p3 = Person_add(p1,p2);p3.show();
}
void test03()
{Person p1(10,"hello");Person p2(20,"world");Person p3 = p1.Person_add(p2);p3.show();
}int main()
{test01();test02();test03();return 0;
}

编译运行

const修饰的成员函数

在函数后面加const 使函数成为常函数

这个const修饰的是指针 const type* const this 代表不能通过this指针去修改this指针指向对象的内容

class Person
{
    public:
        Person(int age,string name)
        {
            this->age = age;//p1的地址传给this指针 age赋值给了this指向的age name赋值给了this指向的name
            this->name = name;
        }
        void show()
        {
            cout << age <<" "<< name << endl;
        }

        //常函数 不能通过this指针修改this指针指向的对象内容

        //常量指针常量
        Person Person_add(Person &p2)const
        {
            Person p(this->age + p2.age,this->name + p2.name);
            return p;
        }
        int age;
        string name;

};
 

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

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

相关文章

2023大数据面试总结

文章目录 Flink&#xff08;SQL相关后面专题补充&#xff09;1. 把状态后端从FileSystem改为RocksDB后&#xff0c;Flink任务状态存储会发生哪些变化&#xff1f;2. Flink SQL API State TTL 的过期机制是 onCreateAndUpdate 还是 onReadAndWrite&#xff1f;3. watermark 到底…

《Graph of Thoughts: Solving Elaborate Problems with Large Language Models》中文翻译

《Graph of Thoughts: Solving Elaborate Problems with Large Language Models》- 思维图&#xff1a;用大型语言模型解决复杂的问题 论文信息摘要1. 介绍2. 背景及符号2.1 语言模型和情境学习 3. GoT 框架3.1 推理过程3.2 思想转变3.3 评分和排名思路 4. 系统架构及扩展性4.1…

驱动开发--自动创建节点udev机制的实现过程分析

一&#xff0c;创建设备文件的机制 1&#xff0c;mknod&#xff1a;手动创建设备节点 2&#xff0c;devfs&#xff1a;创建设备节点的逻辑在内核空间&#xff0c;2.5版本后淘汰 3&#xff0c;udev&#xff1a;自动创建设备节点的机制&#xff0c;逻辑在用户空间&#xff0c;…

vue2中使用富文本编辑器tinyMCE全过程

第一步&#xff1a;安装TinyMCE $npm install tinymce5.10.0 -S $npm install tinymce/tinymce-vue3.0.1 -S 第二步&#xff1a;在node_modules中找到tinymce文件夹将内部文件移入pubilc/tinymce文件夹中在index.html文件中引入tinymce.min.js 注意&#xff1a;不把js文件放…

数据结构和算法(5):二叉树

树 向量允许通过下标或秩&#xff0c;在常数的时间内找到目标对象&#xff1b;然而&#xff0c;一旦需要对这类结构进行修改&#xff0c;那么无论是插入还是删除&#xff0c;都需要耗费线性的时间。 列表允许借助引用或位置对象&#xff0c;在常数的时间内插入或删除元素&…

linux 系统资源命令

系统资源命令 当前系统负载 w查看的是整体的负载&#xff0c;可以来观察当前系统有没有压力 w 系统当前负载 第一行显示的内容依次为&#xff1a;时间、系统运行时间、登录用户数、平均负载(1分钟、5分钟、15分钟) 第二行后展示的信息为&#xff1a;当前登录的都有哪些用户、在…

Falcon 180B 目前最强大的开源模型

Technology Innovation Institute最近发布了Falcon 180B大型语言模型(LLM)&#xff0c;它击败了Llama-2 70b&#xff0c;与谷歌Bard的基础模型PaLM-2 Large不相上下。 180B是是Falcon 40B模型一个最新版本。以下是该模型的快速概述: 180B参数模型&#xff0c;两个版本(base和…

【Java基础篇 | 类和对象】--- 聊聊什么是内部类

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习Java的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 前言 当一个事物的内部&…

TCP服务器使用多路复用

启用复用的作用&#xff1f; 解决linux系统中的io阻塞问题&#xff0c;让多个阻塞io接口可以一起执行。无需开启线程&#xff0c;节省系统资源。 linux系统中的阻塞io有哪些&#xff1f; scanf、read管道、eadTcp套接字、acppet接收连接请求 有以下两种方式实现多路复用&am…

3D视觉测量:3D空间圆拟合优化

文章目录 0. 测试效果1. 测量思路2. 部分调用代码文章目录:形位公差测量关键内容:通过视觉方法实现GD&T中的圆孔位置定位0. 测试效果 1. 测量思路 空间圆拟合是指在三维空间中找到最佳拟合圆的过程。这通常用于从一组三维点数据中找到一个圆,以最小化数据点到圆的距离之…

MySQL——读写分离

简介 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作&#xff08;INSERT、UPDATE、DELETE&#xff09;&#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。一般来说都是通过 主从复制&#xff…

自动打包机如何精准捆扎

打包机按照自动化程度大致可以分为半自动、自动和全自动三种&#xff0c;全自动大家都很熟悉&#xff0c;可以自动检测、自动输送、自动捆扎&#xff0c;而且捆扎位置先对比较精准&#xff0c;但半自动和自动打包机没有配置光电检测&#xff0c;因此捆扎位置总是不够固定&#…