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机器视觉:红外体温检测
在一个骄阳似火的夏日,全球却被一场突如其来的疫情阴霾笼罩。阿强所在的小镇,平日里熙熙攘攘的街道变得冷冷清清,人们戴着口罩,行色匆匆,眼神中满是对病毒的恐惧。阿强作为镇上小有名气的科技达人,看着这一…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》
近日,嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》,海云安高敏捷信创白盒(SCAP)成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天,网络安全已成为企业生存与发展的核心基石,为了解…...
算法刷题-回溯
今天给大家分享的还是一道关于dfs回溯的问题,对于这类问题大家还是要多刷和总结,总体难度还是偏大。 对于回溯问题有几个关键点: 1.首先对于这类回溯可以节点可以随机选择的问题,要做mian函数中循环调用dfs(i&#x…...
统计学(第8版)——统计抽样学习笔记(考试用)
一、统计抽样的核心内容与问题 研究内容 从总体中科学抽取样本的方法利用样本数据推断总体特征(均值、比率、总量)控制抽样误差与非抽样误差 解决的核心问题 在成本约束下,用少量样本准确推断总体特征量化估计结果的可靠性(置…...
