函数
1.1 概述
作用:将一段经常使用的代码封装起来,减少重复代码
一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能;
1.2 函数的定义
函数的定义一般主要有5个步骤:
1、返回值类型
2、函数名
3、参数列表
4、函数体语句
5、return 表达式
例:实现一个加法函数,功能是,传入两个整型数据,计算数据相加的结果,并且返回
1、返回值类型 int
2、函数名 add
3、参数列表 (int num1,int num2)
4、函数体语句 int sum = num1 num2;
5、return 表达式 return sum;
1.3 函数的调用
int sum = add(num1,num2);
#define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> using namespace std; //定义函数要在调用函数之前,否则会报找不到标识符的错误 //num1和num2称为形参,函数定义的时候,并没有实际的参数,只是一个形式上的参数,简称形参 int add(int num1, int num2) { int sum = num1 num2; return sum; } int main() { int a = 1; int b = 2; //a和b称为实参,即有实际的参数 //当调用函数时,实参的值会传递给形参 cout << add(a,b) << endl; return 0; }
1.4 值传递
所谓值传递,就是函数调用时实参将数值传入给形参
值传递时,如果形参发生变化,并不会影响实参
#define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> using namespace std; //定义函数要在调用函数之前,否则会报找不到标识符的错误 //num1和num2称为形参,没有实际的参数 int add(int num1, int num2) { int sum = num1 num2; return sum; } void swap(int num1, int num2) { cout << "交换前:" << endl; cout << "num1 = " << num1 << endl; cout << "num2 = " << num2 << endl; int temp = num1; num1 = num2; num2 = temp; cout << "交换后:" << endl; cout << "num1 = " << num1 << endl; cout << "num2 = " << num2 << endl; } int main() { int a = 1; int b = 2; //a和b称为实参,即有实际的参数 //值传递的过程中,形参的改变并不会影响实参 cout << add(a,b) << endl; cout << "交换前实参:" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; swap(a, b); cout << "交换后实参:" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; }
1.5 函数的常见样式
常见的函数样式有4种:
1、无参无返
2、有参无返
3、无参有返
4、有参有返
1.6 函数的声明
作用:告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。
函数的声明可以多次,但是函数 的定义只能 有一次
刚刚我们已经测试了,将函数的定义放在函数的调用之前,编译无法通过,但是我们可以通过函数的声明提前告诉编译器函数的存在
#define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> using namespace std; int add(int num1, int num2); void swap(int a, int b); int main() { int a = 1; int b = 2; //a和b称为实参,即有实际的参数 //值传递的过程中,形参的改变并不会影响实参 cout << add(a,b) << endl; cout << "交换前实参:" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; swap(a, b); cout << "交换后实参:" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; } //定义函数要在调用函数之前,否则会报找不到标识符的错误,我们可以通过函数的声明解决这个问题 //num1和num2称为形参,没有实际的参数 int add(int num1, int num2) { int sum = num1 num2; return sum; } void swap(int num1, int num2) { cout << "交换前:" << endl; cout << "num1 = " << num1 << endl; cout << "num2 = " << num2 << endl; int temp = num1; num1 = num2; num2 = temp; cout << "交换后:" << endl; cout << "num1 = " << num1 << endl; cout << "num2 = " << num2 << endl; }
声明可以有多次,但是定义只能有一次;但是可以通过重写的方式定义方法;
1.7 函数的分文件编写
作用:让代码结构更加清晰
函数分文件编写一般有4个步骤
1、创建后缀名为 .h 的头文件
2、创建后缀名为 .cpp 的源文件
3、在头文件中写 函数的声明
4、在源文件中写 函数的定义
例如:创建 test.h 头文件 声明
#pragma once #include <iostream> using namespace std; //函数的声明放在头文件中 int add(int num1, int num2); void swap(int a, int b); void swap(int a);
创建 test.cpp 源文件 定义函数,在这个源文件中引入头文件
#define _CRT_SECURE_NO_WARNINGS 1 //在源文件中包含头文件,包含自己写的头文件 用 双引号 #include "test.h" //函数的定义放在源文件中 //定义函数要在调用函数之前,否则会报找不到标识符的错误,我们可以通过函数的声明解决这个问题 //num1和num2称为形参,没有实际的参数 int add(int num1, int num2) { int sum = num1 num2; return sum; } void swap(int num1, int num2) { cout << "交换前:" << endl; cout << "num1 = " << num1 << endl; cout << "num2 = " << num2 << endl; int temp = num1; num1 = num2; num2 = temp; cout << "交换后:" << endl; cout << "num1 = " << num1 << endl; cout << "num2 = " << num2 << endl; } void swap(int num1) { cout << "交换前:" << endl; cout << "num1 = " << num1 << endl; }
之后在一个源文件中 写一个 主方法,并且引入 test.h 头文件 即可 使用 封装好的函数
#define _CRT_SECURE_NO_WARNINGS 1 //在这里包含头文件即可 #include "test.h" int main() { int a = 1; int b = 2; //a和b称为实参,即有实际的参数 //值传递的过程中,形参的改变并不会影响实参 cout << add(a,b) << endl; cout << "交换前实参:" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; swap(a, b); cout << "交换后实参:" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "重写swap方法后的输出:"; swap(a); return 0; }