类和对象——(7)this指针

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝
人生就像骑单车,想保持平衡就得往前进!

一起加油!

目录

一、隐含的this指针:

二、this指针讲解:

三、说明: 

 四、注意:

五、共勉:


一、隐含的this指针:

#include<iostream>
#define PI 3.1415926
using namespace std;
class circle{
	private:
		int r;
	public:
		circle(int pr):r(pr){
		}
		double getarea();	
};

double circle::getarea(){
	return PI*r*r;
}

int main(){
	circle cir1(5);
	circle cir2(10);
	circle cir3(15);
	cout<<"半径为5的圆的面积为"<<cir1.getarea()<<endl;
	cout<<"半径为10的圆的面积为"<<cir2.getarea()<<endl;
	cout<<"半径为15的圆的面积为"<<cir3.getarea()<<endl;
	return 0;
}

二、this指针讲解:

        类的每个对象中都拥有数据成员的存储空间。上面的例题中定义了三个对象,因此有三个同样大小的空间存放三个对象的数据成员。但是,cir1、cir2 和 cir3 在调用函数 getarea()时都调用同一段函数代码段。

        当不同对象的成员函数引用数据成员时,如何保证引用的是指定对象的数据成员呢?

        对于cir1.getarea(),应该是引用对象 cir1 中的r,来计算圆 cir1的面积;而对于 cir2.getarea( )来说,则应该是引用对象 cir2 中r,来计算出圆 cir2 的面积。现在 ciri 和 cir2 调用的是同一个函数段,系统应该怎样使函数分别引用 cirl 和 cir2 中的数据成员?

        通过 this 指针可以解决这个问题在每一个成员函数中都包含一个特殊的指针,称为 this 指针。它是指向本类对象的指针。this 指针是一个特殊的隐含指针,它隐含在每一个类的非静态成员函数中(包括构造函数和析构函数),即类的每个非静态成员函数都有一个 this 指针指向调用这个成员函数的对象。当一个对象调用成员函数时,编译系统先将对象的首地址赋给 this 指针,然后调用成员函数。在成员函数存取数据成员时,隐含地使用 this 指针,这样成员函数就能够通过 this 指针来访问目的对象的数据成员。
        例如,当 cir1 调用成员函数 getarea 时,编译系统把对象 cirl 的起始地址赋给 this 指针。因此,在成员函数引用数据成员时,就按照 this 的指向找到对象 cirl 的数据成员。例如 getarea 数要计算 PI*r*r 的值,实际上是执行以下语句:

PI*this->r*this->r;

由于当前 this 指向 cir1,因此相当于执行以下语句:

PI*cir1.r*cir1.r;

这样就计算出圆 cir1 的面积。

        同样地,如果 cir2 调用成员函数 getarea,编译系统就把对象 cir2 的起始地址赋给成员函这样就计算出圆 cir1 的面积。getarea 的 this 指针,计算出来的结果就是 cir2 的面积。this 指针是隐式使用的,它是作为参数被传递给成员函数的。
成员函数 getarea 的定义如下: 

double circle::getarea(){
	return PI*r*r;
}

C++编译后把它处理为:

double circle::getarea(circle *this){
	return PI*this->r*this->r;
}

即在成员函数的形参表列中增加一个 this 指针。 

在调用该成员函数时,实际上是用以下方式调用的:

cirl.getarea(&cir1);

将对象 cir1的地址传递给形参 this 指针。然后按 this 的指向去引用对象的成员。

三、说明: 

         上述的这些过程都是编译系统自动实现的,程序设计者不必人为地在形参中增加this 指针,也不必将对象a 的地址传给 this 指针。同时,在需要时也可以显式地使用 this指针。

例如,在 circle 类的 getarea 函数中,下面两种表示方法都是合法并且相互等价的。

return (PI * r *r);				//隐含使用 this 指针
return (PI * this->r * this->r);//显式使用 this 指针

 四、注意:

         可以用*this 表示被调用的成员函数所在的对象,*this 就是 this 所指向的对象,即当前的对象上面的 return 语句也可写成:

return(PI*(*this).r * (*this).r);

*this 两侧的括号不能省略,不能写成*this.r 

五、共勉:

        以上就是我对类和对象——(6)友元的理解,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对类和对象的理解,请持续关注我哦!!! 

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

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

相关文章

如何理解微服务体系结构中的 CQRS

本文翻译自 How To Understand CQRS In Microservices Architecture&#xff0c;原作者 OLEKSII。 问题描述 在典型的软件应用程序中&#xff0c;有一个负责写入和读取操作的数据存储。通常&#xff0c;应用程序实现一些 CRUD 操作&#xff0c;并且非常简单。你存储了一些东西并…

如何使用Python核对文件夹内的文件

说明&#xff1a;日常工作中&#xff0c;我们经常会遇到这样的场景&#xff1a;核对A、B文件夹中文件的差异&#xff0c;找出A、B文件夹中不同部分的文件&#xff1b; 本文介绍如何使用Python来实现&#xff1b; 第一步&#xff1a;获取文件清单 首先&#xff0c;我们要获取…

Mysql date类型设置默认值curdate失败解决

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

【华为数据之道学习笔记】1-2华为数字化转型与数据治理

传统企业通过制造先进的机器来提升生产效率&#xff0c;但是未来&#xff0c;如何结构性地提升服务和运营效率&#xff0c;如何用更低的成本获取更好的产品&#xff0c;成了时代性的问题。数字化转型归根结底就是要解决企业的两大问题&#xff1a;成本和效率&#xff0c;并围绕…

AcWing.93.递归实现组合型枚举(Java版)

//递归实现组合型枚举,从n个数中选出不重复的m个. //按字典顺序输出&#xff0c;从小到大每次找三个 //可以用for循环,i 从 start开始, 每次深搜都修改搜索起始点 //数据量较大,用BufferedWriter输出import java.io.*; import java.util.*; public class Main {static int n,m;…

自建网站:零基础手把手教学,非IT技术也能写啦!!!

自建网站 服务器域名WordPress网页美感设计收款系统 服务器 腾讯云链接&#xff1a;https://cloud.tencent.com/act/pro/bestselling?fromSourcegwzcw.7788594.7788594.7788594&utm_mediumcpc&utm_idgwzcw.7788594.7788594.7788594&qz_gdtcthg4zieaaamhubo75ja …

飞行汽车开发原理(上)

前言 小节的安排是由浅入深&#xff0c;要按顺序读&#xff1b;有电路知识基础的同学可跳到“计算机电路”一节开始。因为知识点之间有网状依赖&#xff0c;没办法按分类来讲。 为了避免过于深入、越讲越懵&#xff0c;很多描述仅为方便理解、不求严谨。 半导体特性 导体&a…

机器视觉中的图像增强与对比度调整技术

在机器视觉中&#xff0c;图像增强与对比度调整技术是常用的方法&#xff0c;旨在改善图像的质量和视觉效果&#xff0c;或将图像转换成更适合人眼观察或机器分析识别的形式。 图像增强技术可以针对给定图像的应用场合&#xff0c;有目的地强调图像的整体或局部特性&#xff0…

Vue实现简单用户登录页面

&#x1f4d1;前言 本文主要是【Vue】——Vue实现简单用户登录页面的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日…

这个工具真好用!一个网站轻松搞定电子书

相信很多朋友在寻找电子书资源的时候都会遇到一些困难&#xff0c;比如下载慢、格式不兼容等等。小边最近找到了这款制作电子书工具&#xff0c;无需下载&#xff0c;格式也很齐全&#xff0c;几乎可以满足所有人的需求。 想要电子书制作工具的可以在评论区踢我&#xff0c;现…

助力智慧高速建设,多条高速公路再次见证光路科技工业交换机科技力量!吉林蒲烟高速通车,四川绵九高速、宁攀高速正在调试

近日&#xff0c;光路科技&#xff08;Fiberroad&#xff09;的技术人员配合完成了吉林蒲烟高速的项目验收工作。同时&#xff0c;四川绵九高速、四川宁攀高速项目目前正处于调试阶段&#xff0c;光路科技的技术人员正积极参与其中&#xff0c;确保工业以太网交换机在项目中的顺…

CentOS安装Docker

Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道。 官方网站上…

MySQL数据误删除恢复

1.1 问题简述 开发反馈误删除了部分业务数据&#xff0c;需要恢复数据。 这里采用binlog2sql工具进行数据回滚。 1.2 环境 CentOS Linux release 7.4.1708 (Core) mysql Ver 8.0.21 for Linux on x86_64 (MySQL Community Server - GPL) 1.3 数据库开启binlog 因为数据库serve…

Full-RNS BGV/BFV

参考文献&#xff1a; [BV11] Brakerski Z, Vaikuntanathan V. Fully homomorphic encryption from ring-LWE and security for key dependent messages[C]//Annual cryptology conference. Berlin, Heidelberg: Springer Berlin Heidelberg, 2011: 505-524.[GHS12] Gentry C,…

QThread之moveToThread用法

简介 使用moveToThread函数的流程如下&#xff1a; 1、创建一个类继承自QObject类或其子类&#xff0c;并在其中定义所要执行的多个任务&#xff0c;执行多个任务就要定义相应的信号。 2、任务通过moveToThread指定所要执行的线程。 3、线程通过start启动 4、通过信号与槽机制…

Linux基础命令(测试相关)

软件测试相关linux基础命令笔记 操作系统 常见Linux&#xff1a; Redhat系列&#xff1a;RHSL、Centos、FedoraDebian系列&#xff1a;Debian、Ubuntu以上操作系统都是在原生Linux系统上&#xff0c;增加了一些软件或功能。linux的文件及路径特点 Linux没有盘符的概念&#xf…

11.12每日一题(根式差型求极限:有理化、拉格朗日中值定理)

解决同一极限在两点函数值差时&#xff0c;拉格朗日中值定理常用&#xff0c;也非常有效&#xff01;

如何做好仓库管理工作?好的仓库管理的流程是什么?

本文将为大家讲解&#xff1a;如何做好仓库管理工作&#xff1f;好的仓库管理的流程是什么&#xff1f; ——“怎么样才能做好仓库管理工作&#xff1f;” ——“建议软硬兼施&#xff01;” “软”即仓库管理系统&#xff0c;“硬”即仓库管理制度。系统和制度不是孤立存在…

京东数据分析:2023年10月京东打印机行业品牌销售排行榜

鲸参谋监测的京东平台10月份打印机市场销售数据已出炉&#xff01; 10月份&#xff0c;打印机市场整体销售下滑。鲸参谋数据显示&#xff0c;今年10月份&#xff0c;京东平台打印机的销量将近60万&#xff0c;环比降低约2%&#xff0c;同比降低约5%&#xff1b;销售额为4.4亿&a…

mapbox实现框选要素

成果图 参考博客 https://blog.csdn.net/ScapeD/article/details/89158755 原理与源码 利用mapbox的queryRenderedFeatures方法可以获取范围内的要素&#xff0c;但是这个只能是点和矩形和范围内的全屏要素&#xff0c;并不支持多边形&#xff0c;所以实现这个的思路就是画完框…