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

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 中&#xff0c;函数是一个重要的概念&#xff0c;它是将一段相对独立的、完成特定任务的代码封装起来的程序模块。以下是关于 C 中函数的详细介绍&#xff1a; 函数的定义 函数定义由函数头和函数体组成&#xff0c;其一般形式如下&#xff1a; 返回值类型 …...

上位机知识篇---Python数据图表可视化

文章目录 前言第一部分&#xff1a;Matplotlib1. 图形和轴&#xff08;Figure and Axes&#xff09;FigureAxes创建一个新的图形在图形中添加一个或多个轴 2. 绘图命令绘制折线图绘制散点图绘制条形图绘制饼图绘制直方图等高线图&#xff08;Contour plot&#xff09;&#xff…...

详解:TCP/IP五层(四层)协议模型

一.五层&#xff08;四层&#xff09;模型 1.概念 TCP/IP协议模型分为五层&#xff1a;物理层、数据链路层、网络层、传输层和应用层。这五层每一层都依赖于其下一层给它提供的网络去实现需求。 1&#xff09;物理层&#xff1a;这是最基本的一层&#xff0c;也是最接近硬件…...

【原生记忆能力 怎么让大模型拥有原生的记忆能力】

首先&#xff0c;需要明确“原生记忆能力”具体指的是什么。通常来说&#xff0c;大模型如GPT-3或GPT-4在生成回复时是基于训练数据的模式识别&#xff0c;而不是真正的记忆。所以用户可能希望模型能够持续记住之前的交互信息&#xff0c;或者在多次使用中积累知识&#xff0c;…...

百度APP iOS端磁盘优化实践(上)

01 概览 在APP的开发中&#xff0c;磁盘管理已成为不可忽视的部分。随着功能的复杂化和数据量的快速增长&#xff0c;如何高效管理磁盘空间直接关系到用户体验和APP性能。本文将结合磁盘管理的实践经验&#xff0c;详细介绍iOS沙盒环境下的文件存储规范&#xff0c;探讨业务缓…...

qml Dialog详解

1、概述 Dialog是QML&#xff08;Qt Modeling Language&#xff09;中用于显示对话框的组件&#xff0c;它提供了一个模态窗口&#xff0c;通常用于与用户进行重要交互&#xff0c;如确认操作、输入信息或显示警告等。Dialog组件具有灵活的布局和样式选项&#xff0c;可以轻松…...

2025年的校招管理系统会全面实现智能化吗?

随着科技的不断进步&#xff0c;企业的招聘方式也在不断地演变。特别是在校园招聘领域&#xff0c;传统的招聘方法已经难以满足现代企业的需求。2025年的校招管理系统是否会全面实现智能化&#xff1f;这是一个值得探讨的话题。 想象一下&#xff0c;每年的校招季&#xff0c;…...

【Unity】使用Canvas Group改变UI的透明度

目录 一、前言二、Canvas Group三、结合DOTween达到画面淡进的效果 一、前言 在平时开发中&#xff0c;可以通过控制材质、Color改变UI透明度&#xff0c;除此之外还可以CanvasGroup组件来控制透明度。 二、Canvas Group 官方文档链接&#x1f449;&#x1f449; 点击进入 …...

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. 承前 本篇博文是对上一篇文章&#xff0c;链接: 5. 马科维茨资产组合模型政策意图AI金融智能体(Qwen-Max)增…...

Unity自学之旅05

Unity自学之旅05 Unity学习之旅⑤&#x1f4dd; AI基础与敌人行为&#x1f94a; AI导航理论知识&#xff08;基础&#xff09;开始实践 &#x1f383; 敌人游戏机制追踪玩家攻击玩家子弹碰撞完善游戏失败条件 &#x1f917; 总结归纳 Unity学习之旅⑤ &#x1f4dd; AI基础与敌…...

linux中关闭服务的开机自启动

引言 systemctl 是 Linux 系统中用于管理 systemd 服务的命令行工具。它可以用来启动、停止、重启服务&#xff0c;管理服务的开机自启动&#xff0c;以及查看服务的状态等。 什么是 systemd&#xff1f; systemd 是现代 Linux 发行版中默认的 初始化系统&#xff08;init sys…...

Python----Python高级(文件操作open,os模块对于文件操作,shutil模块 )

一、文件处理 1.1、文件操作的重要性和应用场景 1.1.1、重要性 数据持久化&#xff1a; 文件是存储数据的一种非常基本且重要的方式。通过文件&#xff0c;我们可 以将程序运行时产生的数据永久保存下来&#xff0c;以便将来使用。 跨平台兼容性&#xff1a; 文件是一种通用…...

ubuntu黑屏问题解决

重启Ubuntu后&#xff0c;系统自动进入tty1&#xff0c;无法进入桌面。想到前几天安装了一些主题之类的&#xff0c;然后今天才重启&#xff0c;可能是这些主题造成冲突或者问题了把。 这里直接重新安装ubuntu-desktop解决&#xff1a; 更新源&#xff1a; sudo apt-get upd…...

Java如何实现反转义

Java如何实现反转义 前提 最近做的一个需求&#xff0c;是热搜词增加换一批的功能。功能做完自测后&#xff0c;交给了测试伙伴&#xff0c;但是测试第二天后就提了一个bug&#xff0c;出现了未知词 levis。第一眼看着像公司售卖的一个品牌-李维斯。然后再扒前人写的代码&…...

动态规划(路径问题)

62. 不同路径 62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 动态规划思想第一步&#xff1a;描述状态~ dp[i][j]&#xff1a;表示走到i&#xff0c;j位置时&#xff0c;一共有多少种方法~ 动态规划思想第二步&#xff1a;状态转移方程~ 动态规划思想第三步&#xf…...

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 启动应用&#xff0c;查看结果 2. 编程模型的基本概念3…...

深入 Flutter 和 Compose 的 PlatformView 实现对比,它们是如何接入平台控件

在上一篇《深入 Flutter 和 Compose 在 UI 渲染刷新时 Diff 实现对比》发布之后&#xff0c;收到了大佬的“催稿”&#xff0c;想了解下 Flutter 和 Compose 在 PlatformView 实现上的对比&#xff0c;恰好过去写过不少 Flutter 上对于 PlatformView 的实现&#xff0c;这次恰好…...

C# OpenCV机器视觉:红外体温检测

在一个骄阳似火的夏日&#xff0c;全球却被一场突如其来的疫情阴霾笼罩。阿强所在的小镇&#xff0c;平日里熙熙攘攘的街道变得冷冷清清&#xff0c;人们戴着口罩&#xff0c;行色匆匆&#xff0c;眼神中满是对病毒的恐惧。阿强作为镇上小有名气的科技达人&#xff0c;看着这一…...

OpenClaw定时任务管理:Qwen3-4B每日早报自动生成与推送

OpenClaw定时任务管理&#xff1a;Qwen3-4B每日早报自动生成与推送 1. 为什么需要自动化早报服务 每天早上打开电脑第一件事&#xff0c;就是查看行业动态和技术新闻。但手动收集整理的过程实在太耗时——要打开十几个网页&#xff0c;筛选有价值的信息&#xff0c;再整理成简…...

数字人形象哪里找?lite-avatar形象库150+角色免费使用体验

数字人形象哪里找&#xff1f;lite-avatar形象库150角色免费使用体验 1. 数字人形象获取的痛点与解决方案 在开发数字人应用时&#xff0c;寻找合适的数字人形象往往是第一个拦路虎。传统方式需要自己收集数据、训练模型&#xff0c;这个过程既耗时又耗力&#xff0c;对很多开…...

​​​​​​​中山网站建设哪家好?从AI搜索变革看网站建设的规范流程

在讨论“中山网站建设哪家好”之前&#xff0c;有一个更底层的问题需要先理解&#xff1a;&#x1f449; 网站的价值&#xff0c;正在被AI重新定义。一、信息获取路径正在发生根本变化过去二十年&#xff0c;用户获取信息的方式大致是&#xff1a;用户提出问题 → 打开搜索引擎…...

别再让MCU直连MOSFET了!用N531搭建你的第一个栅极驱动电路(附PCB文件)

从零构建高效MOSFET驱动电路&#xff1a;N531实战指南 在嵌入式开发中&#xff0c;直接使用MCU的GPIO驱动功率MOSFET是一个常见但危险的做法。我曾亲眼见过一个智能家居项目因为这种设计导致整个控制板烧毁——MOSFET开关缓慢产生的高温不仅损坏了功率器件&#xff0c;还反向影…...

M5Stamp C3 Mate LED驱动库:基于RMT的WS2812B精简控制方案

1. 项目概述M5StampC3LED 是专为 M5Stamp C3 Mate 模块设计的 LED 控制库&#xff0c;其本质是一个轻量级封装层&#xff0c;用于驱动板载的 Adafruit NeoPixel&#xff08;WS2812B 兼容&#xff09;RGB LED。该库不直接实现底层时序协议&#xff0c;而是基于 ESP-IDF 或 Ardui…...

Axios 近期安全版本

在执行 npm i 的时候最好执行指定版本&#xff1a;影响版本axios (npm) 0.30.4axios (npm) 1.14.1plain-crypto-js (npm) 4.2.1安全版本axios (npm) < 0.30.3axios (npm) < 1.14.0axios (npm) > 0.30.4axios (npm) > 1.14.1plain-crypto-js (npm) 恶意包已被 np…...

别再傻等1000步了!用DDIM在Stable Diffusion里5分钟搞定高质量出图(附详细参数设置)

5分钟极速出图&#xff1a;DDIM采样器在Stable Diffusion中的实战指南 当你在深夜赶稿需要快速生成概念图时&#xff0c;当客户要求半小时内看到10个设计方案时&#xff0c;传统扩散模型缓慢的生成速度往往让人抓狂。别担心&#xff0c;DDIM采样器就是为这种紧急场景而生的利器…...

TDEFNODE 安装与入门:从源码编译到成功跑通案例(超详细避坑指南)

TDEFNODE 安装与入门&#xff1a;从源码编译到成功跑通案例&#xff08;超详细避坑指南&#xff09; 一、前言 TDEFNODE 是一个用于地壳形变建模的经典科研程序&#xff0c;常用于 GNSS 速度场反演、块体运动分析以及断层滑动研究。 但与常见软件不同&#xff1a;TDEFNODE 不是…...

深入解析pysim中的eUICC ISD-R命令:从基础操作到高级应用

1. eUICC ISD-R命令基础入门 第一次接触eUICC ISD-R命令时&#xff0c;我完全被那些专业术语搞晕了。经过几个项目的实战&#xff0c;我发现这些命令其实就像智能手机上的应用商店操作——只不过管理的是SIM卡上的应用。eUICC&#xff08;嵌入式通用集成电路卡&#xff09;是现…...

镜像视界|AI空间计算重塑公安实战:从“找人”到“锁人”的智能体革命——基于Pixel-to-Space、MatrixFusion与三维轨迹建模的空间级无感定位系统

&#x1f4d8; 镜像视界&#xff5c;AI空间计算重塑公安实战&#xff1a;从“找人”到“锁人”的智能体革命 ——基于Pixel-to-Space、MatrixFusion与三维轨迹建模的空间级无感定位系统 一、实战痛点&#xff1a;为什么公安仍停留在“找人阶段” 在当前公安实战中&#xff0c…...