7.C++中的函数
C++中的函数
在 C++ 中,函数是一个重要的概念,它是将一段相对独立的、完成特定任务的代码封装起来的程序模块。以下是关于 C++ 中函数的详细介绍:
函数的定义
函数定义由函数头和函数体组成,其一般形式如下:
返回值类型 函数名(参数列表) {// 函数体// 执行相关操作的语句// 可以有返回值语句(如果返回值类型不是void)return 返回值;
}
例如,一个简单的加法函数可以这样定义:
int add(int a, int b) {return a + b;
}
函数的参数
- 形式参数:在函数定义中括号内声明的参数,用于接收调用函数时传递进来的值,它就像一个占位符,在函数被调用时才会被赋予实际的值。
- 实际参数:在函数调用时传递给函数的具体值或变量,它们将被赋值给函数的形式参数,实参可以是常量、变量、表达式等。
- 参数传递方式
- 值传递:将实参的值复制一份传递给形参,在函数内部对形参的修改不会影响到实参。
- 指针传递:将实参的地址传递给形参,通过指针可以在函数内部直接访问和修改实参的值。
- 引用传递:形参是实参的别名,对形参的操作实际上就是对实参的操作,函数内部对形参的修改会直接反映到实参上。
函数的返回值
- 函数通过
return语句返回一个值给调用者,返回值的类型在函数定义的返回值类型中指定。 - 如果函数的返回值类型是
void,则表示该函数不返回任何值,这种函数通常用于执行一些特定的操作,如打印信息、修改全局变量等。
函数的调用
当需要执行函数中的代码时,就需要调用函数。函数调用的一般形式为:函数名(实参列表)。例如,调用前面定义的add函数:
int main() {int result = add(3, 5);std::cout << "结果是:" << result << std::endl;return 0;
}
函数重载
在 C++ 中,可以定义多个同名的函数,但这些函数的参数列表必须不同(参数个数、参数类型或参数顺序不同),这就是函数重载。例如:
int add(int a, int b) {return a + b;
}double add(double a, double b) {return a + b;
}
内联函数
使用inline关键字声明的函数称为内联函数。在编译时,编译器会将内联函数的代码直接嵌入到调用它的地方,而不是像普通函数那样进行函数调用的跳转,这样可以减少函数调用的开销,提高程序的执行效率。例如:
inline int square(int x) {return x * x;
}
函数模板
函数模板是一种通用的函数定义方式,可以用来创建具有相同逻辑但处理不同数据类型的函数。其一般形式如下:
template <typename T>
T max(T a, T b) {return (a > b)? a : b;
}
在使用函数模板时,编译器会根据实际调用时传递的参数类型来自动生成相应的函数实例。
函数指针
函数指针是一种指向函数的指针变量,它可以用来存储函数的地址,并且通过函数指针可以调用其所指向的函数。函数指针的定义形式如下:
返回值类型 (*指针名)(参数列表);
例如,对于前面定义的add函数,可以定义一个函数指针来指向它:
int (*addPtr)(int, int) = add;
然后可以通过函数指针来调用函数:
int result = addPtr(3, 5);
函数指针在回调函数、函数表等场景中非常有用。
成员函数与非成员函数
- 成员函数:是定义在类内部的函数,它可以访问类的成员变量和其他成员函数,通过类的对象或指针来调用。成员函数可以是公有(public)、私有(private)或保护(protected)的,用于实现类的行为和操作。
class MyClass {
public:void memberFunction() {// 访问成员变量等操作}
};
- 非成员函数:定义在类外部的函数,它不属于任何类,不能直接访问类的私有成员。非成员函数通常用于实现一些与类相关但又不适合作为类成员函数的功能,或者是一些通用的功能函数。
虚函数与多态
- 虚函数:在基类中使用
virtual关键字声明的成员函数,它允许在派生类中被重新定义(覆盖)。虚函数是实现多态性的重要机制。
class Base {
public:virtual void virtualFunction() {std::cout << "Base::virtualFunction" << std::endl;}
};class Derived : public Base {
public:void virtualFunction() override {std::cout << "Derived::virtualFunction" << std::endl;}
};
- 多态:通过使用虚函数,当用基类指针或引用指向派生类对象时,调用虚函数会根据对象的实际类型来决定调用哪个类的函数版本,从而实现多态行为。
int main() {Base* basePtr = new Derived();basePtr->virtualFunction(); // 调用Derived类的virtualFunctiondelete basePtr;return 0;
}
Lambda 表达式(匿名函数)
Lambda 表达式是 C++11 引入的一种匿名函数的语法,它可以在需要函数的地方直接定义和使用,而不需要像普通函数那样先定义再调用。Lambda 表达式的一般形式如下:
[capture list](parameters) -> return type {// 函数体
}
例如,一个简单的 Lambda 表达式用于计算两个数的和:
auto addLambda = [](int a, int b) -> int {return a + b;
};
int result = addLambda(3, 5);
Lambda 表达式在算法、函数式编程等场景中非常方便,可以作为函数对象传递给其他函数,或者用于定义临时的、一次性的函数逻辑。
相关文章:
7.C++中的函数
C中的函数 在 C 中,函数是一个重要的概念,它是将一段相对独立的、完成特定任务的代码封装起来的程序模块。以下是关于 C 中函数的详细介绍: 函数的定义 函数定义由函数头和函数体组成,其一般形式如下: 返回值类型 …...
上位机知识篇---Python数据图表可视化
文章目录 前言第一部分:Matplotlib1. 图形和轴(Figure and Axes)FigureAxes创建一个新的图形在图形中添加一个或多个轴 2. 绘图命令绘制折线图绘制散点图绘制条形图绘制饼图绘制直方图等高线图(Contour plot)ÿ…...
详解:TCP/IP五层(四层)协议模型
一.五层(四层)模型 1.概念 TCP/IP协议模型分为五层:物理层、数据链路层、网络层、传输层和应用层。这五层每一层都依赖于其下一层给它提供的网络去实现需求。 1)物理层:这是最基本的一层,也是最接近硬件…...
【原生记忆能力 怎么让大模型拥有原生的记忆能力】
首先,需要明确“原生记忆能力”具体指的是什么。通常来说,大模型如GPT-3或GPT-4在生成回复时是基于训练数据的模式识别,而不是真正的记忆。所以用户可能希望模型能够持续记住之前的交互信息,或者在多次使用中积累知识,…...
百度APP iOS端磁盘优化实践(上)
01 概览 在APP的开发中,磁盘管理已成为不可忽视的部分。随着功能的复杂化和数据量的快速增长,如何高效管理磁盘空间直接关系到用户体验和APP性能。本文将结合磁盘管理的实践经验,详细介绍iOS沙盒环境下的文件存储规范,探讨业务缓…...
qml Dialog详解
1、概述 Dialog是QML(Qt Modeling Language)中用于显示对话框的组件,它提供了一个模态窗口,通常用于与用户进行重要交互,如确认操作、输入信息或显示警告等。Dialog组件具有灵活的布局和样式选项,可以轻松…...
2025年的校招管理系统会全面实现智能化吗?
随着科技的不断进步,企业的招聘方式也在不断地演变。特别是在校园招聘领域,传统的招聘方法已经难以满足现代企业的需求。2025年的校招管理系统是否会全面实现智能化?这是一个值得探讨的话题。 想象一下,每年的校招季,…...
【Unity】使用Canvas Group改变UI的透明度
目录 一、前言二、Canvas Group三、结合DOTween达到画面淡进的效果 一、前言 在平时开发中,可以通过控制材质、Color改变UI透明度,除此之外还可以CanvasGroup组件来控制透明度。 二、Canvas Group 官方文档链接👉👉 点击进入 …...
2024年博客之星主题创作|2024年度感想与新技术Redis学习
Redis工具深入了解 1.引言与感想2.Redis工具了解2.分布式系统了解2.1单机架构2.2分布式是什么2.3应用服务和数据库服务分离2.4引入更多的应用服务器2.5理解负载均衡器2.6数据库读写分离2.7引入缓存2.8数据库分库分表2.9引入微服务2.10分布式系统小结 1.引言与感想 2024学习了很…...
6. 马科维茨资产组合模型+政策意图AI金融智能体(DeepSeek-V3)增强方案(理论+Python实战)
目录 0. 承前1. 幻方量化 & DeepSeek1.1 What is 幻方量化1.2 What is DeepSeek 2. 重写AI金融智能体函数3. 汇总代码4. 反思4.1 不足之处4.2 提升思路 5. 启后 0. 承前 本篇博文是对上一篇文章,链接: 5. 马科维茨资产组合模型政策意图AI金融智能体(Qwen-Max)增…...
Unity自学之旅05
Unity自学之旅05 Unity学习之旅⑤📝 AI基础与敌人行为🥊 AI导航理论知识(基础)开始实践 🎃 敌人游戏机制追踪玩家攻击玩家子弹碰撞完善游戏失败条件 🤗 总结归纳 Unity学习之旅⑤ 📝 AI基础与敌…...
linux中关闭服务的开机自启动
引言 systemctl 是 Linux 系统中用于管理 systemd 服务的命令行工具。它可以用来启动、停止、重启服务,管理服务的开机自启动,以及查看服务的状态等。 什么是 systemd? systemd 是现代 Linux 发行版中默认的 初始化系统(init sys…...
Python----Python高级(文件操作open,os模块对于文件操作,shutil模块 )
一、文件处理 1.1、文件操作的重要性和应用场景 1.1.1、重要性 数据持久化: 文件是存储数据的一种非常基本且重要的方式。通过文件,我们可 以将程序运行时产生的数据永久保存下来,以便将来使用。 跨平台兼容性: 文件是一种通用…...
ubuntu黑屏问题解决
重启Ubuntu后,系统自动进入tty1,无法进入桌面。想到前几天安装了一些主题之类的,然后今天才重启,可能是这些主题造成冲突或者问题了把。 这里直接重新安装ubuntu-desktop解决: 更新源: sudo apt-get upd…...
Java如何实现反转义
Java如何实现反转义 前提 最近做的一个需求,是热搜词增加换一批的功能。功能做完自测后,交给了测试伙伴,但是测试第二天后就提了一个bug,出现了未知词 levis。第一眼看着像公司售卖的一个品牌-李维斯。然后再扒前人写的代码&…...
动态规划(路径问题)
62. 不同路径 62. 不同路径 - 力扣(LeetCode) 动态规划思想第一步:描述状态~ dp[i][j]:表示走到i,j位置时,一共有多少种方法~ 动态规划思想第二步:状态转移方程~ 动态规划思想第三步…...
python http调用视觉模型moondream
目录 一、什么是moondream 二、资源地址 三、封装了http进行接口请求 四、代码解析 解释 可能的改进 一、什么是moondream Moondream 是一个针对视觉生成任务的深度学习模型,专注于图像理解和生成,包括图像标注(captioning)、问题回答(Visual Question Answering,…...
Spark Streaming编程基础
文章目录 1. 流式词频统计1.1 Spark Streaming编程步骤1.2 流式词频统计项目1.2.1 创建项目1.2.2 添加项目依赖1.2.3 修改源目录1.2.4 添加scala-sdk库1.2.5 创建日志属性文件 1.3 创建词频统计对象1.4 利用nc发送数据1.5 启动应用,查看结果 2. 编程模型的基本概念3…...
深入 Flutter 和 Compose 的 PlatformView 实现对比,它们是如何接入平台控件
在上一篇《深入 Flutter 和 Compose 在 UI 渲染刷新时 Diff 实现对比》发布之后,收到了大佬的“催稿”,想了解下 Flutter 和 Compose 在 PlatformView 实现上的对比,恰好过去写过不少 Flutter 上对于 PlatformView 的实现,这次恰好…...
C# OpenCV机器视觉:红外体温检测
在一个骄阳似火的夏日,全球却被一场突如其来的疫情阴霾笼罩。阿强所在的小镇,平日里熙熙攘攘的街道变得冷冷清清,人们戴着口罩,行色匆匆,眼神中满是对病毒的恐惧。阿强作为镇上小有名气的科技达人,看着这一…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门  Modul…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
