当前位置: 首页 > 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;看着这一…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...