当前位置: 首页 > news >正文

C++|向函数传递对象

在 C++ 里,对象作为函数的参数和返回值,有值传递、指针传递和引用传递这三种传递方式,下面为你详细介绍。

1.值传递

在值传递时,把实参对象的值复制给形参对象,函数会接收实参的一个副本,而非实参本身。函数内对形参的修改不会影响到实参。

#include <iostream>
using namespace std;
class MyClass {
public:int value;MyClass(int val) : value(val) {}
};// 值传递
void modifyValue(MyClass obj) {obj.value = 20;
}int main() {MyClass obj(10);modifyValue(obj);cout << "Value after modification: " << obj.value << endl; // 输出 10return 0;
}

 但是对象占用内存都比较大,一般都不传对象本身,而改为传对象引用或者对象指针。

2.指针传递

指针传递时,函数接收的是实参的地址。通过指针,函数能够直接修改实参对象。

#include <iostream>
using namespace std;
class MyClass {
public:int value;MyClass(int val) : value(val) {}
};// 指针传递
void modifyValue(MyClass* objPtr) {if (objPtr != nullptr) {objPtr->value = 20;}
}int main() {MyClass obj(10);modifyValue(&obj);cout << "Value after modification: " << obj.value << endl; // 输出 20return 0;
}

3.引用传递

函数接收的是实参的引用,也就是实参的别名。函数内对引用的修改会直接影响到实参。

使用对象引用作为函数参数最常见,它不但有指针作为参数的优点,而且比指针作为参数更简单、更方便。 

#include <iostream>
using namespace std;
class MyClass {
public:int value;MyClass(int val) : value(val) {}
};// 引用传递
void modifyValue(MyClass& objRef) {objRef.value = 20;
}int main() {MyClass obj(10);modifyValue(obj);cout << "Value after modification: " << obj.value << endl; // 输出 20return 0;
}

4.三种传递方式比较

从代码效率上看,用对象值传递的方式的效率相对低一些,它需要创建新的对象来接收实参传来的值,用指针或者引用效率更高。

值传递较为安全,不会影响原始对象;指针传递和引用传递能直接修改原始对象,不过使用指针时需要注意空指针的情况。引用比指针使用起来更加简洁,方便,在C++中更常用。当然如果实参数据不能被修改,可以(应该)在前面加上const所以一般更建议用引用。

相关文章:

C++|向函数传递对象

在 C 里&#xff0c;对象作为函数的参数和返回值&#xff0c;有值传递、指针传递和引用传递这三种传递方式&#xff0c;下面为你详细介绍。 1.值传递 在值传递时&#xff0c;把实参对象的值复制给形参对象&#xff0c;函数会接收实参的一个副本&#xff0c;而非实参本身。函数…...

网络爬虫【爬虫库urllib】

我叫不三不四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲爬虫 urllib介绍 Urllib是Python自带的标准库&#xff0c;无须安装&#xff0c;直接引用即可。 Urllib是一个收集几个模块来使用URL的软件包&#xff0c;大致具备以下功能。 ● urlli…...

【一起来学kubernetes】17、Configmap使用详解

前言概述核心特性创建 ConfigMap使用 ConfigMap1. **环境变量**2. **Volume 挂载**3. **命令行参数** 更新与热重载Docker容器中Java服务使用Configmap**一、通过环境变量注入****步骤说明****示例配置** **二、通过 Volume 挂载配置文件****步骤说明****示例配置** **三、动态…...

QT程序双击可执行文件运行方法

1、qt编译选择release模式 在pro文件添加&#xff1a;QMAKE_LFLAGS -no-pie 2、cmake编译qt界面程序 在CMakeLists.txt文件中添加&#xff1a; set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -no-pie") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -no-pie")注意 …...

【css酷炫效果】实现鱼群游动动态效果

【css酷炫效果】实现小鱼游动动态效果 缘创作背景css代码创建div容器引入jquery引入鱼群js完整代码效果图成品资源下载链接:点击下载 缘 在开发系统功能的时候,无意间看到了小鱼游动特效,感觉很有意思,就在网上找了相关教程,分享给大家。 创作背景 刚看到csdn出活动了…...

【GNN】GAT

消息传递 层数越多&#xff0c;聚合更多的消息...

Prims region.Views 为null

原因&#xff1a; 导航未完成或异步问题 解决方式&#xff1a;使用回调确认导航完成后再操作视图 _regionManager.RequestNavigate("MonitorRegion", "MonitorView", nps, navigationResult > {if (navigationResult.Result true){var region _regio…...

在windows10系统上安装docker,然后在容器中运行GPU版本的Pytorch,并使用vscode连接该容器

一 . 安装Docker Desktop 首先打开网址https://docs.docker.com/desktop/install/windows-install/ 下载完后&#xff0c;双击下面的exe文件进行安装&#xff0c;默认情况下&#xff0c;Docker Desktop 安装在C:\Program Files\Docker\Docker 出现提示时&#xff0c;请确保…...

WPS 搭配 Zotero 插件使用

安装Zotero后&#xff0c;Word自动引入了插件&#xff0c;但WPS却没有&#xff0c;做为WPS的重度用户&#xff0c;这是不行的。 解决方案&#xff1a; 1.找到 Zotero.dotm 一般在安装目录下&#xff0c; 2.然后复制到WPS的startup下 我的目录是&#xff1a;C:\Users\lianq…...

卷积神经网络 - 卷积层(具体例子)

为了更一步学习卷积神经网络之卷积层&#xff0c;本文我们来通过几个个例子来加深理解。 一、灰度图像和彩色图像的关于特征映射的例子 下面我们通过2个例子来形象说明卷积层中“特征映射”的概念&#xff0c;一个针对灰度图像&#xff0c;一个针对彩色图像。 例子 1&#x…...

新造车不再比拼排名,恰是曲终人散时,剩者为王

据称新能源汽车周销量不再发布&#xff0c;这可能也预示着新造车终于到了给出答案的时候了&#xff0c;新造车企业前三强已基本确立&#xff0c;其余那些落后的车企已很难有突围的机会&#xff0c;而特斯拉无疑是其中的最大赢家。 3月份第一周的数据显示&#xff0c;销量最高的…...

学有所得-Deepin linux操作系统在安装nvidia显卡驱动后的问题修复

目标&#xff1a; 装有deepin V20.9的移动硬盘在系统启动后无法进入图形化界面&#xff0c;修复系统。 背景&#xff1a; 为了方便随时随地开发研究&#xff0c;又不破坏笔记本电脑原装的正版操作系统&#xff0c;在一个朗科&#xff08;容量&#xff15;&#xff10;&…...

【QT:网络编程】

网络编程的本质就是在编写应用层代码。需要传输层支持。而传输层的协议有UDP、TCP等 使用QT网络编程的API&#xff0c;需要在.pro文件中添加network模块&#xff0c;而QT中的控件和其他内容都是包含在QtCore模块中的&#xff08;默认添加&#xff09; QT为什么要划分模块&…...

基于srpingboot高校智慧校园教学管理服务平台的设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

分布式事务3PC解决了2PC哪些问题?

三阶段提交(3PC,Three-Phase Commit) 是对 二阶段提交(2PC,Two-Phase Commit) 的改进,旨在解决 2PC 的一些固有缺陷,特别是在分布式系统中的容错性和性能问题。以下是 3PC 比 2PC 更好的原因及其优势的详细分析: 1. 二阶段提交(2PC)的问题 2PC 是一种经典的分布式事…...

Dify 使用 - 创建 翻译 工作流

文章目录 1、选择 模板2、设置 和 基本使用3、运行应用 1、选择 模板 2、设置 和 基本使用 翻译模板 自带了系统提示词&#xff0c;你也可以修改 3、运行应用 右上角 点击 发布 – 更新&#xff0c;运行应用&#xff0c;就可以在新的对话界面中使用此功能 2025-03-18&#x…...

集成学习(上):Bagging集成方法

一、什么是集成学习&#xff1f; 在机器学习的世界里&#xff0c;没有哪个模型是完美无缺的。就像古希腊神话中的"盲人摸象"&#xff0c;单个模型往往只能捕捉到数据特征的某个侧面。但当我们把多个模型的智慧集合起来&#xff0c;就能像拼图一样还原出完整的真相&a…...

c盘清理宝藏小工具

引言 在数字化时代&#xff0c;电脑的存储空间和系统性能直接影响着我们的工作效率和用户体验。C盘作为系统盘&#xff0c;常常因为文件堆积、缓存冗余等问题变得臃肿不堪&#xff0c;导致电脑运行缓慢。为了解决这一问题&#xff0c;我最近试用了一款名为“小番茄C盘清理”的…...

QT多媒体播放器类:QMediaPlayer

QMediaPlayer 是 Qt Multimedia 模块中的核心类&#xff0c;用于播放音频和视频媒体文件。它支持本地文件、网络流媒体以及实时数据源&#xff0c;具备播放控制、状态管理、元数据访问等功能。QMediaPlayer的基本用法可能包括设置媒体源、控制播放&#xff08;播放、暂停、停止…...

Java动态代理模式深度解析

1. 动态代理基础 1.1 核心组件 Proxy 类&#xff1a;动态生成代理对象的工厂类&#xff0c;核心方法为 newProxyInstance()。 InvocationHandler 接口&#xff1a;代理逻辑的处理器&#xff0c;所有方法调用会转发到其 invoke() 方法。 1.2 实现步骤 定义接口&#xff1a;代…...

【WRF模拟】垂直层设置/与观测数据对比

【WRF模拟】垂直层设置/与观测数据对比 WRF 中 有关垂直层的namelist变量1. 主要垂直层设置参数2. 详细解释3. 典型设置示例WRF 输出的垂直剖面数据与观测数据进行比较WRF 采用 地形跟随坐标(terrain-following coordinate)WRF 输出的垂直剖面数据与观测数据进行比较参考WRF …...

植物知识分享论坛毕设

1.这四个文件直接是什么关系&#xff1f;各自都是什么作用&#xff1f;他们之间是如何联系的&#xff1f; 关系与联系 UserController.java 负责接收外部请求&#xff0c;调用 UserService.java 里的方法来处理业务&#xff0c; 而 UserService.java 又会调用 UserMapper.jav…...

可视化图解算法:链表中倒数(最后)k个结点

1. 题目 描述 输入一个长度为 n 的链表&#xff0c;设链表中的元素的值为ai &#xff0c;返回该链表中倒数第k个节点。 如果该链表长度小于k&#xff0c;请返回一个长度为 0 的链表。 数据范围&#xff1a;0≤n≤105&#xff0c;0 ≤ai≤109&#xff0c;0 ≤k≤109 要求&am…...

qt下载和安装教程国内源下载地址

qt不断在更新中&#xff0c;目前qt6日渐成熟&#xff0c;先前我们到官方下载或者国内镜像直接可以下载到exe文件安装&#xff0c;但是最近几年qt官方似乎在逐渐关闭旧版本下载通道&#xff0c;列为不推荐下载。但是qt5以其广泛使用和稳定性&#xff0c;以及积累大量代码使得qt5…...

html5表格实战-跨行跨列

效果如图 代码如图...

使用OBS进行webRTC推流参考

参考腾讯云官方文档&#xff1a; 云直播 OBS WebRTC 推流_腾讯云 说明非常详细&#xff0c;分为通过WHIP和OBS插件的形式进行推流。 注意&#xff1a;通过OBS插件的形式进行推流需要使用较低的版本&#xff0c;文档里有说明&#xff0c;需要仔细阅读。...

Rockchip --- 图像时延优化

通过配置wait-line&#xff0c;即图像采集多少行后提前输出buffer给ISP&#xff0c;而无需等待图像全部采集完毕。一般设置为图像采集一半后提前输出buffer给ISP &#xff08;一&#xff09;VICAP提前输出 Video Input CAPture是用于图像采集和处理的子系统 1. 通过dts配置 …...

微软 LIDA 库:基于大模型的自动化数据分析与可视化

微软 LIDA 库&#xff1a;基于大模型的自动化数据分析与可视化 一、核心架构与 LLM 交互流程 #mermaid-svg-UzSwZNKPlgrJUpej {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-UzSwZNKPlgrJUpej .error-icon{fill:#5…...

java-正则表达式-集合-泛型

正则表达式 正则表达式到底是什么东西&#xff1f; 在编写处理字符串的程序或网页时&#xff0c;经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说&#xff0c;正则表达式就是记录文本规则的代码。 http://tool.oschina.net/r…...

力扣刷题994. 腐烂的橘子

994. 腐烂的橘子 - 力扣&#xff08;LeetCode&#xff09; 使用bfs&#xff0c;先遍历所有的橘子&#xff0c;统计所有的橘子数量&#xff0c;然后把腐烂的橘子放入队列当中&#xff0c;然后进行bfs遍历&#xff0c;套用bfs的模版&#xff0c;但是每一次出队的橘子&#xff08…...

Kubernetes的Service详解

一、Service介绍 在 kubernetes 中&#xff0c; pod 是应用程序的载体&#xff0c;我们可以通过 pod 的 ip 来访问应用程序&#xff0c;但是 pod 的 ip 地址不是固定的&#xff0c;这也就意味着不方便直接采用pod 的 ip 对服务进行访问。 为了解决这个问题&#xff0c;kuberne…...

Linux目录理解

前言 最近在复习linux&#xff0c;发现有些目录总是忘记内容&#xff0c;发现有些还是得从原义和实际例子去理解会记忆深刻些。以下是个人的一些理解 Linux目录 常见的Linux下的目录如下&#xff1a; 1. 根目录 / (Root Directory) 英文含义&#xff1a;/ 是文件系统的根…...

vue中js简单创建一个事件中心/中间件/eventBus

vue中js简单创建一个事件中心/中间件/eventBus 目录结构如下&#xff1a; eventBus.js class eventBus {constructor() {this.events {};}// 监听事件on(event, callback) {if (!this.events[event]) {this.events[event] [];}this.events[event].push(callback);}// 发射…...

1~2 课程简介+ESP32-IDF环境搭建(虚拟机Linux环境下)

哔站“宸芯IOT”视频链接 一、课程内容介绍 1.什么是ESP32 ESP32是集成2.4GHz Wi-Fi和蓝牙双模的单芯片方案&#xff0c;具有超高的射频性能、稳定性、通用性和可靠性&#xff0c;以及超低的功耗&#xff0c;满足不同的功耗需求&#xff0c;适用于各种应用场景。ESP32是ESP8…...

Linux系统移植篇(十一)Linux 内核启动流程

要分析 Linux 启动流程&#xff0c;同样需要先编译一下 Linux 源码&#xff0c;因为有很多文件是需要编译才 会生成的。首先分析 Linux 内核的连接脚本文件 arch/arm/kernel/vmlinux.lds&#xff0c;通过链接脚本可以 找到 Linux 内核的第一行程序是从哪里执行的。vmlinux.lds …...

React19源码系列之Hooks(useId)

useId的介绍 https://zh-hans.react.dev/reference/react/useId useId 是 React 18 引入的一个新 Hook&#xff0c;主要用于生成全局唯一的 ID。在开发中&#xff0c;我们经常需要为元素&#xff08;如表单元素、模态框等&#xff09;生成唯一 ID&#xff0c;以便在 JavaScri…...

深度学习-149-langchain之如何不使用with_structured_output()从模型中返回结构化数据

文章目录 1 不使用with_structured_output()方法1.1 问题背景1.2 输出解析器1.3 远程deepseek大模型API2 基于提示词2.1 直接使用提示词2.2 少样本提示词3 直接提示和解析模型输出3.1 使用PydanticOutputParser3.1.1 构建解析器3.1.2 构建提示模板3.1.3 调用大模型3.1.4 调用链…...

SAP DOI EXCEL应用

【应用场景】采用DOI方式打开填充EXCEL数据 *&---------------------------------------------------------------------* *& 包含 ZFI1009R_TOP *&---------------------------------------------------------------------* TABLES:bkpf,bseg. D…...

RS485电路设计注意事项

&#xff08;一&#xff09;RS485的电平标准&#xff1a; RS485用缆线两端的电压差值来表示传递信号&#xff0c;逻辑“1”以两线间的电压差为2V~6V标识&#xff0c;逻辑“0”以两线间的电压差为-2V~-6V标识。由此可见&#xff0c;接口信号电平较低&#xff0c;不易损坏接口电路…...

Git 回退操作详解:带示例的“小白”指南

前言 在日常开发中&#xff0c;我们难免会遇到&#xff1a; 改错代码&#xff1a;推送之前才发现某些行根本就不该动提交错误&#xff1a;commit 信息打错、提交到错误分支想回到之前版本&#xff1a;测试时发现之前版本是好的&#xff0c;需要回去查看 这就需要用到 Git 的…...

PyQt5库 各种导入项的作用

from PyQt5.QtCore import QIODevice, QSharedMemory, pyqtSignal 这行代码是从 PyQt5 库中导入了几个类和信号&#xff0c;用于开发桌面应用程序。下面是每个导入项的详细解释&#xff1a; QIODevice: QIODevice 是 PyQt5 中的一个类&#xff0c;提供了对输入输出设备的抽象…...

Git下载安装(保姆教程)

目录 1、Git下载 2、Git安装&#xff08;windows版&#xff09; &#xff08;1&#xff09;启动安装程序 &#xff08;2&#xff09;阅读许可协议 &#xff08;3&#xff09;选择安装路径 &#xff08;4&#xff09;选择组件 &#xff08;5&#xff09;选择开始菜单文件夹…...

关系数据库设计理论

目录 一、数据依赖——重点 &#xff08;1&#xff09;平凡依赖/非平凡函数依赖 &#xff08;2&#xff09;完全/部分函数依赖 &#xff08;3&#xff09;传递函数依赖 二、范式&#xff08;NF&#xff09; &#xff08;1&#xff09;第一范式 &#xff08;2&#xff09…...

图解LLM智能体(LLM Agents):构建与运作机制的全面解析

LLM智能体:构建与运作机制 LLM智能体(LLM Agents)正在迅速普及,似乎逐渐取代了我们熟悉的传统对话式LLM。这些令人惊叹的能力并非凭空而来,而是需要多个组件协同工作。 本文包含超过60张定制插图,将深入探讨LLM智能体的领域、其核心组件以及多智能体框架的工作原理。 文…...

Anaconda 入门指南

Anaconda 入门指南 一、下载安装 Anaconda 1、下载地址&#xff1a;Anaconda 推荐下载 python3 版本, 毕竟未来 python2 是要停止维护的。 2、安装 Anaconda 按照安装程序提示一步步安装就好了, 安装完成之后会多几个应用&#xff1a; Anaconda Navigtor &#xff1a;用于管…...

YOLOv11小白的进击之路(九)创新YOLO11损失函数之NWD损失函数源码解读

之前的博客也有对YOLO11的损失函数进行过源码分析&#xff0c;可以参考&#xff1a;YOLOv11小白的进击之路&#xff08;六&#xff09;创新YOLO的iou及损失函数时的源码分析_yolov11的损失函数是什么-CSDN博客最近在做小目标检测的时候注意到了NWD损失函数&#xff0c;这里对其…...

【c++】内存序 和 内存一致性模型

c 11 中为了支持并发&#xff0c;定义了内存序和内存一致性模型。这个概念听起来非常高深&#xff0c;好像是在多线程编程领域浸淫多年之后的神级程序员才能搞明白&#xff0c;并用明白的东西。 本文尝试用最简单的方式说清楚这个概念。因为这个概念真的超级简单&#xff0c;大…...

力扣128. 最长连续序列 || 452. 用最少数量的箭引爆气球

最长连续列 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 输入&#xff1a;nums [100,4,200,1,3,2] 输出&#xff1a;4 解释&…...

从零开始写C++3D游戏引擎(开发环境VS2022+OpenGL)之十一点二五 光照贴图(lighting maps)的实现 细嚼慢咽逐条读代码系列

写在篇前的话 作为一个曾经在代码堆里面苦苦挣扎的萌新,困惑的事情在于库,各种依赖,包换文件,链接库,纠结于代码的作用意义。尤其在3D引擎开发的问题上,很多人都被各种困难给阻拦,放弃了在3D渲染,3D游戏引擎上大涨鸿图的机会。 当然关于3D游戏引擎的教程已经汗牛充栋…...

优先级队列(PriorityQueue)_1_模拟实现优先级队列

1、概念 前面介绍过队列&#xff0c;队列是一种先进先出(FIFO)的数据结构 &#xff0c;但有些情况下&#xff0c; 操作的数据可能带有优先级&#xff0c;一般出队 列时&#xff0c;可能需要优先级高的元素先出队列 &#xff0c;这时候&#xff0c;使用队列显然不合适了。 在这种…...