C++学习 函数

news2024/11/24 20:00:00

目录

函数

 函数的定义

 函数的调用

 值传递

 常见的样式

 函数的声明

函数的分文件编写

 1.创建后缀.h的头文件

 2.创建后缀.cpp的源文件

 3.头文件中写函数声明

 4.源文件中写函数定义

 5.函数调用


函数

作用:

        C++中的函数充当了组织和重用代码的重要工具,提供了抽象、封装、模块化和接口隔离等功能,使得代码更易于理解、调试、维护和扩展。

 函数的定义

函数的定义步骤:

  • 返回值类型
  • 函数名
  • 形参列表
  • 函数体语句
  • return表达式

语法:

返回值类型 函数名(形参列表)

{

        函数体语句

        return表达式

}

int add(int num1, int num2) //函数的定义
{
    int sum = num1 + num2;
    return sum;
}
// 定义一个返回值类型为int,函数名称为add,传递参数为两个int类型的形式参数num1,num2
// 函数体内定义了一个int类型的sum 用于实现两个传递参数的求和,并将求和结果返回

 函数的调用

#include <iostream>
using namespace std;

// 函数
// 返回值类型、函数名、参数列表、函数体语句、return表达式
int add(int num1, int num2) // 函数的定义
{
    int sum = num1 + num2;
    return sum;
}

int main()
{
    // 进行函数调用时,会将实际参数(实参)传递给形参赋值进行函数调用,注意传递实参的类型要与形参数据类型匹配,否则可能精度丢失
    cout << add(2, 4) << endl; // 6 调用add方法会返回求和的数与后面结果相同  int sum = add(2,4);  cout << sum << endl;

    system("pause");
    return 0;
}

 

 值传递

  • 函数调用时实参数值传入给形参
  • 值传递时,形参发生改变不影响实参

#include <iostream>
using namespace std;

// 函数
// 值传递
// 需求: 实现两数交换 void代表无需返回值
void swap(int num1, int num2) // 函数的定义
{
    int temp = num1;
    num1 = num2;
    num2 = temp;
    // 传递实参(2,3)进行swap函数调用
    cout << num1 << "\t" << num2 << endl; // 输出结果3,2

    //  return; 可写可不写 因为返回值类型为void
}

int main()
{
    swap(2, 3);

    // 验证值传递,形参参数的改变不影响实参
    int a = 5, b = 6;
    swap(a, b); // 进行a,b交换
    cout << "a = " << a << "\t"
         << "b="<< b << endl; // 5, 6 首先内存中是开辟了两段空间给a、b 函数调用的时候会为num1,num2 temp开辟空间 进行赋值。 所以进行值传递的时候他们互不干扰、发生参数交换的是num1、num2与实参a、b无关
    system("pause");
    return 0;
}

 

 常见的样式

无非也就这四种:

  • 无参无返
  • 有参无返
  • 无参有返
  • 有参有返

#include <iostream>
using namespace std;

// 函数
// 函数样式

// 无参无返
void test01()
{
    cout << "no params and no return" << endl;
}
// 有参无返
void test02(int a)
{
    cout << "have params and no return \t"<<"params =" << a << endl;
}
// 无参有返
int test03()
{
    cout << "no params and have return \t";
    return 10;
}
// 有参有返
int test04(int b)
{
    cout << "have params and have return \t";
    return b + 1;
}

int main()
{
    test01(); // 无参无返函数调用

    test02(10); // 有参无返函数调用

    int num = test03(); // 无参有返函数调用,并定义num整型变量接收test03函数调用返回结果
    cout << "test03 test \t return =  " << num << endl;

    int num2 = test04(10);
    cout << "test04 test \t return =  " << num2 << endl;
    system("pause");
    return 0;
}

 

 函数的声明

作用:

        告知编译器函数名称以及如何进行函数调用,函数的实际主体可以单独定义。

        函数可以多次声明,但只可以定义一次。

 问题:

在函数执行到第11行时,可以看到main函数中没有定义maxValue函数,因为maxValue函数是在第16行定义的。

解决方式

  • 将maxValue函数代码块提前至main函数前
  • 在调用前进行函数的定义

 第一种之前我们一直都是这么做的,现在来看一下第二种的代码。

#include <iostream>
using namespace std;

// 函数
// 函数的声明
int maxValue(int a, int b); // 可以声明多次 尽管如此、声明一次即可、无意义
int maxValue(int a, int b); // 可以声明多次
int maxValue(int a, int b); // 可以声明多次
int main()
{
    int a = 5, b = 10;
    cout << maxValue(a, b) << endl;
    system("pause");
    return 0;
}
// 需求:定义一个函数比较两个数值的最大值
// 函数定义
int maxValue(int a, int b)
{
    return a > b ? a : b;
}
// int maxValue(int a, int b)   报错 redefinition of 'int maxValue(int, int)' 不可以重复定义
// {
//     return a > b ? a : b;
// }

函数的分文件编写

将函数写在多个文件中的作用:代码结构清晰。

步骤:

  • 创建后缀.h的头文件
  • 创建后缀.cpp的源文件
  • 头文件中写函数声明
  • 源文件中写函数定义
  • 函数调用

 使用vscode的用户可以参照这个下载插件实现多文件编写。

 C++函数分文件编写(VScode2021配置教程)_vscode分文件编写_spiritLHL的博客-CSDN博客

 1.创建后缀.h的头文件

 2.创建后缀.cpp的源文件

3.头文件中写函数声明

#include<iostream>
using namespace std;
int maxValue(int a, int b); // 函数的声明

 4.源文件中写函数定义

#include "maxValue.h"

// 函数的定义
int maxValue(int a, int b)
{
    cout << "maxValue" << endl;
    return a > b ? a : b;
}

5.函数调用

#include <iostream>
#include "maxValue.h"
using namespace std;


// 函数
// 函数的分文件编写   步骤:1.创建后缀.h的头文件 2.创建后缀.cpp的源文件 3.头文件中写函数声明 4.源文件中写函数定义
// 需求:返回两个数字的最大值

int main()
{
    int a = 3, b = 4;
    cout << maxValue(a, b) << endl;
    system("pause");
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/725199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8-js高级-3

JavaScript 进阶 - 3 了解构造函数原型对象的语法特征&#xff0c;掌握 JavaScript 中面向对象编程的实现方式&#xff0c;基于面向对象编程思想实现 DOM 操作的封装。 编程思想构造函数原型综合案例 编程思想 学习 JavaScript 中基于原型的面向对象编程序的语法实现&#xff…

大胜归来!妙记多这份「高考填志愿」指南请收好!

2023年高考已经落下帷幕&#xff0c;上周和本周多个省份就要公布高考分数了&#xff0c;志愿填报还会远吗&#xff1f; 不知道自己的分数能报什么院校&#xff1f; 不知道目标院校的王牌专业有哪些&#xff1f; 不知道目标专业的就业方向&#xff1f; 不知道有哪些志愿填报小…

C# 简述.NET中堆和栈的区别

目录 一&#xff0c;引言 二&#xff0c;.NET的堆栈 三&#xff0c;.NET中的托管堆 四&#xff0c;.NET中的非托管堆 五、堆栈、托管堆和非托管堆的比较 六&#xff0c;总结 一&#xff0c;引言 .NET提供了垃圾回收机制&#xff0c;使程序员从内存管理中被解放出来。但这…

Unity 语法详解之查找游戏物体的方法(含查找隐藏物体)

为了更好的看懂&#xff0c;有一个非常基础的知识&#xff0c;如果不知道可以移步去了解一下哦 unity | gameobject和transform的区别和关联通俗解释_gameobject transform_菌菌巧乐兹的博客-CSDN博客 一、前情提要 大写的GameObject是个类&#xff0c;里面写满了物体有关的…

python利用docxtpl将excel数据写入word表格

解决问题一&#xff1a;将excel数据读取&#xff0c;并将其保存在word中的表格 解决问题二&#xff1a;使用xlrd读入excel数据&#xff0c;如果是整数的话&#xff0c;打开word后发现保存变成了浮点数&#xff0c;后边多了“.0”。 问题一、 可以参考docxtpl快速上手使用,数…

电商API知识点整理(二)关键字搜索接口item_search获取商品列表

关键字搜索接口名称&#xff1a;item_search 接口背景&#xff1a; 随着互联网的普及和电子商务市场的快速发展&#xff0c;越来越多的消费者开始通过关键字搜索来寻找自己感兴趣的商品。为了满足用户的需求&#xff0c;电商平台开发了各种搜索接口&#xff0c;其中之一就是i…

22个最佳WordPress网站预约插件(2023)

您是否正在寻找可以节省您和您的客户时间的自动预订或预约插件&#xff1f;您是否厌倦了将业务输给竞争对手&#xff1f;您是否正在寻找一种简化在线预约和预订的方法&#xff1f; 您的网站应该让客人可以轻松查看和预订可用的预约。这是WordPress预约插件可以帮助您实现在线业…

基于Python的DES算法的企业用户数据安全加密系统设计与实现

博主介绍&#xff1a;擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案例…

【SLAM14讲】04 三维空间刚体运动

一、坐标系之间的欧式变换 xW , yW , zW定义的世界坐标系&#xff0c;xC , yC , zC 定义的相机坐标系。 相机视野中某个向量 p&#xff0c;它的坐标为pc&#xff0c;而从世界坐标系下看&#xff0c;它的坐标 pw。 二、相机运动 相机运动是一个刚体运动&#xff0c;它保证了同…

golang arena

go 1.20新特性 goland设置 Enviroment 定义环境变量 Go tool arguments 就是go build 的参数 Program arguments 启动参数 GOEXPERIMENTarenas -tags goexperiment.arenas //go:build goexperiment.arenaspackage mainimport ("arena""fmt""net/…

可以实现语音录入的好用的记事本app是哪个?

在现代快节奏的工作生活中&#xff0c;记事本成为了人们不可或缺的工具之一。然而&#xff0c;传统的手写记事本已经无法满足人们快速、高效的需求&#xff0c;语音记事的好处不言而喻。 它不仅能够提高工作效率&#xff0c;减少输入时间&#xff0c;还能够帮助用户更好地记录…

使用Visual Studio 2019 编译Masscan

目录 使用Visual Studio 2019 编译Masscan 1.从github下载源码 2.安装Visual Stiudio 2019 3.准备编译Masscan 4.编译Masscan 总结 使用Visual Studio 2019 编译Masscan 1.从github下载源码 可以直接在GitHub上搜索&#xff0c;下载后的源码目录结构。 2.安装Visual Stiu…

ds1:java-stream流

文章目录 1.修改集合中的值map2.过滤集合中符合条件的值filter找集合中的最大/小的值&#xff0c;及操作后元素的个数max()/min()/count()归约&#xff1a;对集合中所有元素进行自定义计算获取最终值reduce()collect分组(partitioningBy/groupingBy)修改集合中元素之间的连接符…

ctr-k8s镜像管理命令,将k8s正在使用的镜像推送仓库

​ k8s镜像管理命令 查出k8s中pod在使用的镜像 kubectl get -o wide deploy -n yxyw-uat |awk ‘{print $7}’ 查出镜像地址&#xff0c;勾选正则开头配上镜像推送命令 gem-acr-p-a01-registry-vpc.cn-shenzhen.cr.aliyuncs.com/osale/gyx-admin:yxyw-pre-2023-06-05-11-18…

便携式多功能校准器TD1858参考标准

体积小巧&#xff1a;相较于同档次技术指标的多功能校准器&#xff0c;体积缩小至50%&#xff0c;重量轻便&#xff1a;整机质量不到10 kg&#xff0c;人员可轻松实现搬运&#xff0c;方案价值&#xff1a;非常方便携带至工作现场对数字多用表和其他电测仪表进行校准。 直流电压…

搭建cesium源码调试环境

1. cesium源码下载 直接从github上下载即可 https://github.com/CesiumGS/cesium.git 本文下载的是最新版本1.106 2. cesium源码目录简介 1) packages目录 源码目录&#xff0c;包含engine&#xff0c;widgets 2&#xff09;Apps目录 包含一些示例代码 3&#xff09;Spec…

Node中express路由基本使用

1.路由的基本使用 //引入express const expressrequire("express") //创建路由 const appexpress() //规定路由的请求方法 app.get(/,(req,res)>{res.end("hello express") }) //启动路由&#xff0c;并且端口为9000 app.listen(9000,()>{console.l…

ruoyi-vue版本(三十)事务介绍和使用

目录 1 事务管理2 常见坑点13 常见坑点24 Transactional注解的常用属性表&#xff1a; 1 事务管理 新建的Spring Boot项目中&#xff0c;一般都会引用spring-boot-starter或者spring-boot-starter-web&#xff0c;而这两个起步依赖中都已经包含了对于spring-boot-starter-jdbc…

和鲸社区数据分析每周挑战【第九十六期:汽车公司客户细分预测】

和鲸社区数据分析每周挑战【第九十六期&#xff1a;汽车公司客户细分预测】 文章目录 和鲸社区数据分析每周挑战【第九十六期&#xff1a;汽车公司客户细分预测】一、前言1、背景描述2、什么是用户分群&#xff1f;3、数据说明4、数据集预览 二、数据读取和数据初步观察三、潜在…

【动态规划算法】第六题:63.不同路径II

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 &#x1f389;作者宣言&#xff1a;认真写好每一篇博客 &#x1f38a;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作…