C++学习笔记 ——this指针+对象数组

 

目录

一、C++this指针

二、this指针的一个案列

三、对象数组

四、对象数组代码案列详解


一、C++this指针

C++中的this指针是一个特殊的指针,它指向当前对象的地址。在类中的成员函数中,this指针可以用来访问当前对象的成员变量和成员函数。

当我们调用一个对象的成员函数时,编译器会自动将当前对象的地址作为参数传递给该函数,并将其存储在一个名为this的隐式参数中。在函数内部,我们可以通过this指针来访问该对象的成员变量和成员函数。

this指针是一个指向当前对象的常量指针,它存储了当前对象的地址。通过this指针,我们可以在成员函数内部访问和操作当前对象的成员变量和成员函数。

例如,考虑下面这个简单的Point类:

class Point {
public:void set(int x, int y);void print();
private:int m_x;int m_y;
};

在类中定义了set和print两个成员函数,set函数用于设置点的坐标,print函数用于打印点的坐标。

void Point::set(int x, int y) {this->m_x = x;  // 使用this指针访问成员变量m_x,相当于(*this).m_x = x;this->m_y = y;  // 使用this指针访问成员变量m_y,相当于(*this).m_y = y;
}void Point::print() {cout << "Point(" << this->m_x << ", " << this->m_y << ")" << endl;
}

在set函数中,通过this指针来访问和赋值成员变量m_x和m_y,因为成员变量和this指针在同一个对象的内存空间中。

在print函数中,通过this指针来访问成员变量m_x和m_y,并将其打印出来。

使用示例代码:

int main() {Point p;p.set(3, 5);p.print();return 0;
}

输出结果:

Point(3, 5)

在main函数中,首先创建了一个Point对象p。然后调用set函数设置p的坐标为(3, 5),最后调用print函数打印出p的坐标。

需要注意的是,即使没有显示地使用this指针,编译器在调用成员函数时也会隐式地传递当前对象的地址给该成员函数。因此,在成员函数内部可以直接访问成员变量,而不需要使用this指针。但是,为了明确代码的可读性,建议在成员函数中使用this指针来显式地表示操作的是当前对象的成员变量。

二、this指针的一个案列

假设我们有一个Rectangle(矩形)类,其中包含矩形的宽度和高度。我们想要实现一个成员函数,用于计算矩形的面积,并将结果保存在矩形对象中。

#include <iostream>
using namespace std;class Rectangle {
public:void setDimensions(int width, int height);void calculateArea();void printArea();private:int m_width;int m_height;int m_area;
};void Rectangle::setDimensions(int width, int height) {this->m_width = width;   // 使用this指针访问成员变量m_widththis->m_height = height; // 使用this指针访问成员变量m_height
}void Rectangle::calculateArea() {this->m_area = this->m_width * this->m_height; // 使用this指针访问成员变量m_width和m_height,并计算面积
}void Rectangle::printArea() {cout << "The area of the rectangle is: " << this->m_area << endl; // 使用this指针访问成员变量m_area,并打印面积
}int main() {Rectangle rect;rect.setDimensions(5, 3);rect.calculateArea();rect.printArea();return 0;
}

在上面的示例中,我们定义了Rectangle类,其中包含了setDimensions、calculateArea和printArea三个成员函数。

  • setDimensions函数用于设置矩形的宽度和高度,通过this指针访问成员变量m_width和m_height来保存传入的参数。

  • calculateArea函数用于计算矩形的面积,通过this指针访问成员变量m_width和m_height,并将计算结果保存在成员变量m_area中。

  • printArea函数用于打印矩形的面积,通过this指针访问成员变量m_area并进行打印。

在主函数main中,我们创建了一个Rectangle对象rect,并依次调用setDimensions、calculateArea和printArea函数,在控制台输出矩形的面积。

运行上述代码,输出结果应为:

The area of the rectangle is: 15

这个案例展示了如何使用this指针在成员函数中访问和操作当前对象的成员变量。通过使用this指针,我们可以清晰地表达出我们要对当前对象进行操作。

三、对象数组

对象数组是指具有相同类类型的多个对象的集合,这些对象可以按照数组的方式进行管理和操作。

在C++中,我们可以使用类名作为类型名来定义对象数组。例如,如果我们有一个Rectangle(矩形)类,那么我们可以使用以下方式定义包含10个矩形对象的对象数组:

Rectangle rectangles[10];

在定义对象数组时,我们需要指定数组的大小。上面的示例中,我们指定了数组的大小为10,即包含10个矩形对象。

当我们需要对对象数组中的每个对象执行相同的操作时,可以使用循环遍历数组,并依次调用每个对象的成员函数。例如,如果我们需要计算每个矩形的面积并打印结果,可以使用以下代码:

for (int i = 0; i < 10; i++) {rectangles[i].calculateArea();rectangles[i].printArea();
}

上述代码使用for循环遍历rectangles数组中的每个矩形对象,依次调用每个对象的calculateArea和printArea函数,从而计算并打印每个矩形的面积。

需要注意的是,在对象数组中创建的多个对象都是独立的,它们各自拥有自己的成员变量和成员函数。因此,我们可以分别设置每个对象的属性,并对每个对象执行不同的操作。

对象数组是一种非常方便的数据结构,可以用于管理和操作多个相似的对象。例如,在游戏开发中,我们可以使用对象数组来管理游戏中的角色、道具和怪物等对象。

当我们需要创建多个对象,并且这些对象具有相同的类类型和成员函数,可以使用对象数组来管理和操作这些对象。

下面是一个示例,展示了如何创建对象数组并对其进行操作:

#include <iostream>
using namespace std;class Rectangle {
public:void setDimensions(int width, int height);void calculateArea();void printArea();private:int m_width;int m_height;int m_area;
};void Rectangle::setDimensions(int width, int height) {m_width = width;m_height = height;
}void Rectangle::calculateArea() {m_area = m_width * m_height;
}void Rectangle::printArea() {cout << "The area of the rectangle is: " << m_area << endl;
}int main() {const int numOfRectangles = 3;Rectangle rectangles[numOfRectangles];// 设置每个矩形的尺寸rectangles[0].setDimensions(5, 3);rectangles[1].setDimensions(4, 6);rectangles[2].setDimensions(7, 2);// 计算并打印每个矩形的面积for (int i = 0; i < numOfRectangles; i++) {rectangles[i].calculateArea();rectangles[i].printArea();}return 0;
}

在上面的示例中,我们定义了Rectangle类,其中包含了setDimensions、calculateArea和printArea三个成员函数,用于设置矩形的尺寸、计算矩形的面积以及打印矩形的面积。

在主函数main中,我们首先定义了一个常量numOfRectangles来表示矩形对象数组的大小,然后创建了一个名为rectangles的Rectangle类型对象数组,其中包含了numOfRectangles个矩形对象。

接下来,我们使用对象数组的索引来分别设置每个矩形的尺寸。

然后,通过循环遍历对象数组,依次调用calculateArea和printArea函数,并打印每个矩形的面积。

运行上述代码,输出结果应为:

The area of the rectangle is: 15
The area of the rectangle is: 24
The area of the rectangle is: 14

这个示例展示了如何使用对象数组来管理和操作多个对象。你可以根据需要调整numOfRectangles的值来创建不同数量的矩形对象。

四、对象数组代码案列详解

这段代码定义了一个名为Rectangle的类,用于表示矩形对象。它具有三个公有成员函数:setDimensions、calculateArea和printArea,以及三个私有成员变量:m_width、m_height和m_area。

  • setDimensions函数用于设置矩形的宽度和高度。
  • calculateArea函数用于计算矩形的面积,即将宽度和高度相乘,并将结果保存在m_area成员变量中。
  • printArea函数用于打印矩形的面积。

在主函数main中:

  • 声明了一个常量numOfRectangles,用于表示矩形对象数组的大小。
  • 创建了一个名为rectangles的Rectangle类型对象数组,其中包含了numOfRectangles个矩形对象。
  • 使用对象数组的索引来分别设置每个矩形的尺寸。
  • 通过循环遍历对象数组,依次调用calculateArea和printArea函数,并打印每个矩形的面积。

可以根据需要修改numOfRectangles的值来创建不同数量的矩形对象,并设置不同的尺寸。运行代码后,会输出每个矩形的面积。

这段代码示例展示了如何使用对象数组来管理和操作多个矩形对象。通过定义类和成员函数,我们可以对每个矩形对象进行独立的操作,而对象数组提供了一种便捷的方式来组织多个对象。

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

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

相关文章

轻松玩转书生·浦语大模型趣味Demo

轻松玩转书生浦语大模型趣味Demo 大模型及InternLM模型介绍InternLM模型全链路开源 InternLM-Chat-7B智能对话Demo模型介绍模型部署webDemo运行 Lagent智能体工具调用DemoLagent介绍 浦语灵笔图文创作理解Demo通用环境配置模型下载 大模型及InternLM模型介绍 人工智能领域中 参…

shell 计算两个数据百分比,bc高级运算,bc计算系统磁盘剩余内存

目录 安装运算工具 bc使用方法高级数学库 (直接把公式 给他即可)计算百分比计算内存已经使用的百分比计算圆周率 安装运算工具 bc yum -y install bc使用方法 echo $((10/3)) | bc高级数学库 (直接把公式 给他即可) echo $((24)) | bc -l计算百分比 这里是 bc 的用法 也是计…

深度学习 Day24——J3-1DenseNet算法实战与解析

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 文章目录 前言1 我的环境2 pytorch实现DenseNet算法2.1 前期准备2.1.1 引入库2.1.2 设…

「Verilog学习笔记」编写乘法器求解算法表达式

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule calculation(input clk,input rst_n,input [3:0] a,input [3:0] b,output [8:0] c);reg [8:0] data1, data2 ; assign c data2 ; always (posed…

猫咪主食罐头巅峰、希喂、K9哪款好?猫咪主食罐头真实对比测评

在当前科学喂养观念广泛传播的背景下&#xff0c;铲屎官们对猫咪主食的营养价值和健康性有了更高的要求。作为猫咪日常成长和活动的主要能量来源&#xff0c;主食的营养价值对猫咪的健康状况有着直接的影响。特别是对于处于成长期的猫咪来说&#xff0c;选择一款优质的主食对其…

关键词优化完整 “操作 “指南

关键词优化的定义 在内容中突出相关关键词的行为&#xff0c;有助于将谷歌流量引向您的网站。关键词优化要求内容创建者做到以下几点&#xff1a; 研究并发现最佳关键词找到自然的方式在内容中突出相关词语 看看&#xff0c;你已经创建了一些很棒的内容。你做了研究&#xf…

K8S部署GitLab

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

SpringBoot 如何 返回页面

背景 RestController ResponseBody Controller Controller中的方法无法返回jsp页面&#xff0c;或者html&#xff0c;配置的视图解析器 InternalResourceViewResolver不起作用&#xff0c;返回的内容就是Return 里的内容。 Mapping ResponseBody 也会出现同样的问题。 解…

明明白白安装Python解释器(多版本共存切换)、Python IDE:PyCharm(专业版永久)、透彻!

Python解释器安装 ———————— 解释器&#xff08;英语&#xff1a;Interpreter&#xff09;。用户可以到Python的官网上直接下载Python解释器安装程序。 在浏览器地址栏中输入&#xff1a; http://www.python.org 需要最新专业版PyCharm永久使用权限的扫码免费获取&a…

基于FFmpeg的短视频编辑工具Cut

前言 最近在学习FFmpeg和音视频的相关知识&#xff0c;为了加强对FFmpeg的认识和了解&#xff0c;于是撸了一个短视频编辑软件Cut。 效果图先行&#xff1a; 技术点 启动页优化 但启动app的时候会有一个短暂的黑屏或者白屏。为什么呢&#xff1f; 是因为在App启动时&#x…

智能分析网关V4在工业园区周界防范场景中的应用

一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;对…

分布式系统——共识问题

1. 分布式系统 1.1 分布式系统的概念 分布式系统是由多台计算机组成的网络&#xff0c;这些计算机共同协作以实现一个共同的目标。在这种环境中&#xff0c;每台计算机作为一个独立的进程运行。但对最终用户来说&#xff0c;它们似乎是作为一个单一系统在操作。这个概念对于创…

大学生搜题软件,未来可期吗?

作为一家专注于软件开发的公司《智创有术》&#xff0c;我们致力于为客户提供创新、高效和可靠的解决方案。通过多年的经验和专业知识&#xff0c;我们已经在行业内建立了良好的声誉&#xff0c;并赢得了客户的信任和支持。 支持各种源码&#xff0c;网站搭建&#xff0c;APP&a…

数字孪生在增强现实(AR)中的应用

数字孪生在增强现实&#xff08;Augmented Reality&#xff0c;AR&#xff09;中的应用可以提供更丰富、交互性更强的现实世界增强体验。以下是数字孪生在AR中的一些应用&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff…

视频剪辑实战:如何批量嵌套合并视频,提高剪辑效率必备技巧

在视频剪辑工作中&#xff0c;经常要处理大量的视频片段。要提高工作效率&#xff0c;批量嵌套合并视频成为了一项必备技巧。现在一起看看云炫AI智剪如何使用一些实用的技巧&#xff0c;快速、准确地完成批量嵌套合并视频的任务。 合并后的视频截图&#xff0c;由两段不同片段组…

【STM32】STM32学习笔记-DMA直接存储器存储(23)

00. 目录 文章目录 00. 目录01. DMA简介02. DMA主要特性03. 存储器映像04. DMA框图05. DMA基本结构06. DMA请求07. 数据宽度与对齐08. 数据转运DMA09. ADC扫描模式DMA10. 附录 01. DMA简介 小容量产品是指闪存存储器容量在16K至32K字节之间的STM32F101xx、STM32F102xx和STM32F…

解决Gitlab Prometheus导致的磁盘空间不足问题

解决Gitlab Prometheus导致的磁盘空间不足问题 用docker搭建了一个gitlab服务&#xff0c;已经建立了多个项目上传&#xff0c;但是突然有一天就503了。 df -TH查看系统盘&#xff0c;发现已经Used 100%爆满了。。。 &#x1f4a1;Tips&#xff1a;/dev/vda1目录是系统盘目录。…

AntV L7 实现地图功能(高德)

一、 使用前的准备 首先&#xff0c;注册开发者账号&#xff0c;成为高德开放平台开发者 登陆之后&#xff0c;在进入「应用管理」 页面「创建新应用」 为应用添加 Key&#xff0c;「服务平台」一项请选择「 Web 端 ( JSAPI ) 」 二、安装依赖 // 安装L7 依赖 npm install…

2024年【危险化学品生产单位主要负责人】复审模拟考试及危险化学品生产单位主要负责人作业模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年危险化学品生产单位主要负责人复审模拟考试为正在备考危险化学品生产单位主要负责人操作证的学员准备的理论考试专题&#xff0c;每个月更新的危险化学品生产单位主要负责人作业模拟考试祝您顺利通过危险化学品…

深度学习 Day23——J3DenseNet算法实战与解析

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 文章目录 前言1 我的环境2 pytorch实现DenseNet算法2.1 前期准备2.1.1 引入库2.1.2 设…