6 函数
6.1 概述
作用:将一段常常应用的代码封装起来,缩小重置的代码
一个较大的程序,个别能够分为很多的程序块,每个模块都能够封装起来作为一个函数性能。
6.2 函数的定义
定义函数:
- 返回值类型
- 函数名
- 参数列表
- 函数体
- return 表达式
6.3 函数的调用
语法:functionName(peremeterList)
函数中的参数,咱们成为形式参数,简称形参。
而咱们调用参数的时候传入的参数为理论参数,简称实参。
调用函数的时候,实参 的值会传递给 形参,这种值传递也成为传值。
6.4 值传递
函数调用时,会将实参的值传入函数的形参,这个过程称为 值传递 ,又称为 传值。
因而,传值时,如果形参产生扭转,不会影响实参自身的值。只有传址或者传援用能够扭转实参的值。
6.5 函数的申明
作用:通知编译器函数名称以及如何调用函数,函数的理论主体能够在前面独自定义。
函数能够申明很屡次,然而只能定义一次。
函数申明自身对于开发者的意义更多是提前就能晓得这个程序中的局部函数是怎么运行的,而后能够间接去看主函数。而对于编译器来说,理论就相当于把函数的定义间接写在了申明的中央了。编译器发现函数申明之后,就会间接去寻找绝对应的函数定义,并且把函数编译进来。
不过函数申明有一个长处。当函数须要调用另一个函数的时候,函数的定义是有先后的。必须要先定义被调用的函数,再定义调用函数的函数。然而如果在文件头一起申明的话,就不会有这个问题了。而且申明是不须要留神程序的。
6.6 函数的分文件编写
作用:让函数构造更加清晰
步骤:
- 创立后缀名为.h 的头文件
- 创立后缀名为.cpp 的源文件
- 在头文件中写函数的申明
- 在源文件中写函数的定义
做一个简略的替换两个数的函数,把函数独自放在程序中。
先写函数自身的源文件
//swap.cpp
#include"swap.h"
void swap(int& a, int& b) {
int space;
space = a;
a = b;
b = space;
}
而后写这个函数的申明,放在一个头文件中
#pragma once
void swap(int&, int&);
其中 #pragma once
作用和上面的代码差不多:
#ifndef A_H
#define A_H
……
#endif
pragma 是编译附注,这句话示意这个头文件只能被编译一次。整个编译过程中只能关上文件一次。
拓展:
办法一:
pragma once
办法二:
ifndef A_H
这两个办法没有太大的区别。细节上说,办法二的可移植性更高,有些编译器不反对办法一。另一方面,办法一是物理层面上一个文件不会被编译两次。然而如果一个文件有多份拷贝,就会都关上。
而办法二重视的则是文件名。只有文件一样,多少拷贝都只会编译一次。然而如果多个头文件是一个名字的话,也有可能导致剩下的几个不被编译了。
最初咱们编写主函数:
//main.cpp
#include<iostream>
#include"swap.h"
using namespace std;
int main() {
int a = 10, b = 20;
cout << "替换前:" << endl;
cout << "a =" << a << endl;
cout << "b =" << b << endl;
swap(a, b);
cout << "替换后:" << endl;
cout << "a =" << a << endl;
cout << "b =" << b << endl;
}
留神一下:本人编写的头文件蕴含用双引号 ””,而零碎提供的头文件则用尖括号 <>。