C++学习 --函数

目录

1, 函数定义

1-1, 有返回值

1-2, 无返回值

2, 函数声明

3, 函数分文件编写

3-1, 创建自定义头文件

3-2, 创建源文件

3-3, 自定义头文件中编写函数声明

3-4, 在源文件中编写函数定义

3-5, 主文件添加自定义头文件

4, 默认参数

5, 占为参数

6, 函数重载

6-1, 参数个数不同重载

6-2, 参数类型不同重载

6-3, 参数顺序不同重载

6-4, 引用做函数重载


1, 函数定义

函数需要先定义, 再使用, 否则需要对函数进行声明后才能使用

1-1, 有返回值

通过数据类型 函数名(数据类型 参数){语句块 return 同函数数据类型}, 可定义一个有返回值函数

#include <iostream>
using namespace std;//定义函数add
int add(int num1, int num2)
{int sum = num1 + num2;return sum;
}int main()
{cout << add(100, 200) << endl;system("pause");return 0;
}

1-2, 无返回值

通过void 函数名(数据类型 参数){语句块}, 可定义一个无返回值函数

#include <iostream>
using namespace std;//定义无返回值的函数,需要用void
void swap(int num1, int num2)
{int tmp = 0;cout << "交换前的数据:" << endl;cout << "num1 = " << num1 << endl;cout << "num2 = " << num2 << endl;tmp = num1;num1 = num2;num2 = tmp;cout << "交换前的数据:" << endl;cout << "num1 = " << num1 << endl;cout << "num2 = " << num2 << endl;//void类型的函数,不需要return 
}int main()
{int num1 = 10;int num2 = 20;//调用swap函数swap(num1, num2);system("pause");return 0;
}

2, 函数声明

若调用函数在main函数后定义,则需要通过数据类型 函数名(数据类型 参数)的方式, 先对函数进行声明; 若在main函数前定义的函数,则不需要声明

#include <iostream>
using namespace std;//对max_1进行声明
int max_1(int num1, int num2);int main()
{int num1 = 10;int num2 = 20;//调用swap函数cout << "较大的值为:" << max_1(num1, num2) << endl;system("pause");return 0;
}//max_1函数在main函数后,使用的时候需要声明
int max_1(int num1, int num2)
{return num1 > num2 ? num1 : num2;
}

3, 函数分文件编写

先在项目中创建一个头文件, 再创建一个源文件, 在自定义头文件中编写函数声明, 在源文件中编写函数定义, 在主文件中通过#include "自定义头文件"添加自定义头文件

下面以输出两个数字中较大值的函数举例

3-1, 创建自定义头文件

3-2, 创建源文件

3-3, 自定义头文件中编写函数声明

#include <iostream>
using namespace std;int swap(int num1, int num2);

3-4, 在源文件中编写函数定义

//#include "swap.h"的作用:指定该文件使用的头文件为swap.h
#include "swap.h"
#include <iostream>
using namespace std;//函数定义
int swap(int num1, int num2)
{return num1 > num2 ? num1 : num2;
}

3-5, 主文件添加自定义头文件

//添加头文件
#include "swap.h"int main()
{int num1 = 10;int num2 = 20;//调用swap函数cout << "较大的值为:" << swap(num1, num2) << endl;system("pause");return 0;
}
-----------------------------------------------------------
输出结果:
较大的值为:20

4, 默认参数

通过数据类型 函数名(形参x=值x)的方式, 可以给函数定义默认参数

#include <iostream>
#include <string>using namespace std;//定义默认参数
int func(int a = 10, int b = 20)
{	return a + b;
}int main()
{cout << func() << endl;system("pause");return 0;
}
------------------------------------------------
输出结果:
30

注意:

1, 若函数声明中定义了默认参数, 则函数定义中不能再次定义默认参数

int func(int a = 10, int b = 20);
//编译时会报错, 因为默认参数已经在声明中定义,不能再次定义
int func(int a = 10, int b = 20)
{	return a + b;
}

2, 从默认参数开始, 往后的参数都必须是默认参数

5, 占为参数

通过数据类型 函数名(数据类型1, 数据类型n=值)的方式, 可定义占为参数, 占位参数只写数据类型和值, 不用写参数名

#include <iostream>
#include <string>using namespace std;//下面定义了一个int类型的占为参数
void func(int a = 10, int=20)
{	cout << "调用了一个有占位参数的函数!!!" << endl;
}int main()
{//注意:占位参数必须要显示传入func();system("pause");return 0;
}
------------------------------------------------------
输出结果:
调用了一个有占位参数的函数!!!

6, 函数重载

函数名称相同, 形参个数不同,名称不同, 顺序不同可以实现函数重载, 需要在同一个作用域

6-1, 参数个数不同重载

根据传入参数个数不同, 选择相应的函数进行调用

#include <iostream>
#include <string>using namespace std;void func()
{	cout << "调用func!!!" << endl;
}void func(int a)
{cout << "func(int a)!!!" << endl;
}int main()
{//因为传入了参数, 所以会调用func(int a)func(10);system("pause");return 0;
}
----------------------------------------------------
输出结果:
func(int a)!!!

6-2, 参数类型不同重载

根据传入参数类型不同, 选择相应的函数进行调用

#include <iostream>
#include <string>using namespace std;void func(int a)
{	cout << "调用func(int a)!!!" << endl;
}void func(double b)
{cout << "func(int b)!!!" << endl;
}int main()
{double b=20;//形参类型不同,进行函数重载func(b);system("pause");return 0;
}
-------------------------------------------
输出结果:
func(int b)!!!

6-3, 参数顺序不同重载

根据传入参数顺序不同(注意:参数需要不同的数据类型), 选择相应的函数进行调用

#include <iostream>
#include <string>using namespace std;void func(int a, double b, int c)
{	cout << "调用int a, double b)!!!" << endl;
}void func(double b, int a, int c)
{cout << "func(double a, int b)!!!" << endl;
}int main()
{int a = 10;double b = 20;int c = 100;//参数顺序不同,进行函数重载func(b, a, c);system("pause");return 0;
}
---------------------------------------------
输出结果:
func(double a, int b)!!!

说明:函数的返回值不可以作为函数重载的条件

6-4, 引用做函数重载

const引用需要传入具体值才会调用普通引用直接传递变量

#include <iostream>
#include <string>using namespace std;//函数调用时, 只需传入变量
void func(int &a)
{	cout << "调用func(int &a)!!!" << endl;
}//函数调用时, 需要传入具体的值,而不是变量
void func(const int &a)
{cout << "调用func(const int &a)!!!" << endl;
}int main()
{int a = 10;const int& b = a;//这里会调用func(int &a)//因为调用func(int &a)时, 相当于int &a = a, 合法操作 func(a);cout << "-----------------------" << endl;//若这里会调用func(int &a), 相当于int &a = 10, 不合法操作// 所以调用的是func(const int &a)func(10);system("pause");return 0;
}
-------------------------------------------------------------
输出结果:
调用func(int &a)!!!
-----------------------
调用func(const int &a)!!!

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

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

相关文章

北京陪诊小程序|陪诊系统开发|陪诊小程序未来发展不可小觑

近几年随着互联网快速发展&#xff0c;各行业领域都比较注重线上服务系统&#xff0c;通过陪诊小程序开发可以满足更多用户使用需求&#xff0c;同时还能提高用户使用体验。现在陪诊类的软件应用得到全面推广&#xff0c;在医疗行业当中陪诊小程序更贴近用户生活&#xff0c;可…

【漏洞复现】Apache_Tomcat7+ 弱口令 后台getshell漏洞

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证 说明内容漏洞编号漏洞名称Tomcat7 弱口令 && 后台getshell漏洞漏洞评级高…

掌动智能:功能测试及拨测主要功能

在企业中对于功能测试及拨测而言&#xff0c;用户只需提供应用包和产品文档&#xff0c;由资深测试专家设计并执行测试&#xff0c;覆盖核心场景&#xff0c;包含特定业务流程以及行业通用特殊场景&#xff0c;支持需求定制。 执行过程严格监控&#xff0c;依据应用功能和业务需…

8年资深测试总结,接口自动化框架的设计与实现,一文打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、自动化测试框架…

Ionic 模块组件的理解

1 Ionic4.x 文件分析 1.1 app.module.ts 分析 Ionic 是一个基于 Angular 的移动应用开发框架&#xff0c;能帮助开发者使用 Web 技术&#xff08;HTML5、CSS3、JavaScript&#xff09;创建跨平台的应用程序。在 Ionic 应用程序中&#xff0c;app.module.ts 文件是整个应用程序的…

基于javaweb+mysql的jsp+servlet学生成绩管理系统(管理员、教师、学生)

博主24h在线&#xff0c;想要源码文档部署视频直接私聊&#xff0c;9.9元拿走&#xff01; 基于javawebmysql的jspservlet学生成绩管理系统(管理员、教师、学生)(javajspservletjavabeanmysqltomcat) 运行环境 Java≥8、MySQL≥5.7、Tomcat≥8 开发工具 eclipse/idea/myecl…

UE5 c++将自定义UserWdiget添加到对应菜单栏

前言&#xff1a; 为了实现与UserWidget一致的右键添加&#xff0c;便有了此章 注&#xff1a;这里使用的是UE5.3 目标内容&#xff1a; 这里可以参考UserWidget的源码&#xff0c;拷贝一份属于自己的就ok&#xff08;本篇章只是全改成了属于自己的CommonUserWidget&#xff…

Android 使用.9图 NinePatchDrawable实现动态聊天气泡

最近一段时间&#xff0c;在做一个需求&#xff0c;需要实现一个聊天气泡的动画效果&#xff0c;如下图所示&#xff1a; GitHub源码demo &#xff0c;建议下载demo&#xff0c;运行查看。 动态聊天气泡动画 静态聊天气泡 经过一段时间调研&#xff0c;实现方案如下: 实现方…

栈(定义,基本操作,顺序存储,链式存储)

目录 1.栈的定义1.重要术语2.特点 2.栈的基本操作3.栈的顺序存储1.顺序栈的定义2.基本操作1.初始化2.进栈3.出栈4.读栈顶 3.共享栈 4.栈的链式存储 1.栈的定义 栈( Stack&#xff09;是只允许在一端进行插入或删除操作的线性表。 一种受限的线性表&#xff0c;只能在栈顶进行插…

高校为什么需要大数据挖掘平台?

目前数据挖掘已经成为各种应用领域的重要技术&#xff0c;大学数据挖掘课程的开放已经出现。数据挖掘课程整合了多门学科知识。该课程包括各种理论知识&#xff0c;也离不开相关的实用技术。整个教学过程是培养和提高学生全面创新和解决问题的能力。过去&#xff0c;教学过程理…

Vscode禁止插件自动更新

由于电脑的vscode版本不是很新。2022.10月份的版本1.7.2&#xff0c;电脑vscode的python插件装的也是2022年4月份的某个版本&#xff0c;但插件经常自动更新&#xff0c;导致python代码无法Debug,解决办法&#xff1a; 点设置&#xff0c;搜autoUpdate, 把红色框选成无

MicroStation二次开发问题记录(1):打开项目时自动加载dll文件

环境配置 Windows10 MicroStation CE Update16 Visual Studio 2019 前言 开发好的dll文件若每次都需要在打开MS时单独加载&#xff0c;则过于繁琐&#xff0c;因此可以在确定的工程项目文件中进行一次设置&#xff0c;在打开该文件时自动加载 一、加载dll文件 1. 点击File—Se…

ROS学习笔记(5):ros_control

1.ros_control简介 ros_control - ROS Wiki ros_control是为ROS提供的机器人控制包&#xff0c;包含一系列控制器接口、传动装置接口、控制器工具箱等,有效帮助机器人应用功能包快速落地&#xff0c;提高开发效率。 2.ros_control框架 ros_control总体框架&#xff1a; 针对…

【微服务 Spring Cloud 6】服务如何拆分?使用微服务的注意事项?

目录 一、前言二、单体服务的弊端三、微服务化四、服务如何拆分&#xff1f;1、拆分原则2、拆分时机和拆分方法3、拆分实践 五、使用微服务的注意事项1、确保相关业务和利益相关者的支持2、确定微服务的拆分粒度3、遵循微服务架构的原则4、确保接口的稳定性5、关注数据一致性6、…

百数低代码与AI:实现业务智能化的新途径

今年6月&#xff0c;咨询机构麦肯锡发布了的一份题为《生成式人工智能的经济潜力》的研究报告&#xff0c;在报告中&#xff0c;分析师们通过对47个国家及地区的850种职业&#xff08;全球80%以上劳动人口&#xff09;的研究&#xff0c;探讨了在AI成指数级发展背后&#xff0c…

PostgreSQL简介及安装步骤

PostgreSQL简介 PostgreSQL是一款开源的关系型数据库管理系统&#xff0c;具有强大的扩展性、高度的可定制性和可靠的稳定性&#xff0c;因此在企业级应用和开发领域中得到了广泛的应用。本文将介绍PostgreSQL的基本概念以及在各种操作系统上的安装步骤。 安装步骤 1. Window…

05【保姆级】-GO语言的标识符

之前我学过C、Java、Python语言时总结的经验&#xff1a; 先建立整体框架&#xff0c;然后再去抠细节。先Know how&#xff0c;然后know why。先做出来&#xff0c;然后再去一点点研究&#xff0c;才会事半功倍。适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。对于GO语言&a…

CRM客户管理系统究竟是什么?如何实施?

很多销售人员都不是特别喜欢使用信息化软件&#xff0c;然而从销售经理的角度看&#xff0c;信息化又的确提升了团队的管理效率和业绩。追究这些矛盾的原因&#xff0c;无外乎几点&#xff1a; 认知角度 → 销售员&#xff1a;数据没用又浪费我时间 VS 销售经理&#xff1a;数…

聊聊定时器 setTimeout 的时延问题

给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;web前端面试题库 全局的 setTimeout() 方法设置一个定时器&#xff0c;一旦定时器到期&#xff0c;就会执行一个函数或指定的代码片…

字符函数和字符串函数详解

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 1. 字符分类函数 2. 字符转换函数 3. strlen的使用和模拟实现 3.1strlen的使用&#xff1a; 3.2strlen的模拟实现&#xff1a; 4. strcpy的使用和模拟实现 4.1strc…