目录
函数
函数的定义
函数的调用
值传递
常见的样式
函数的声明
函数的分文件编写
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;
}