C++基础教程(4):函数
在计算机编程中,函数是实现特定功能的语句集合。 当程序需要实现该功能时,只需要调用相应的函数,而且可以重复调用。编程人员可将程序分解成一个一个特定功能的函数,从而有利于程序的管理。
通过函数,编程人员可将程序特定的功能打包。每次要实现该功能时,只需要调相应的函数。对于以下一个案例:
int main()
{
statement1;
statement2;
statement3;
statement4;
statement5;
statement6;
return 0;
}
可以将主函数里的6个语句分为两个函数,每个函数包含3个语句。这样主函数只需要调用两个函数。
void function1()
{
statement1;
statement2;
statement3;
}
void function1()
{
statement4;
statement5;
statement6;
}
int main()
{
function1();
function2();
return 0;
}
从案例可知,函数是语句的集合,用于实现设定的功能。通过函数调用可以使程序逻辑更清晰。函数可以重复调用,从而减少代码的使用量。
函数的定义与调用
函数必须先定义,然后才能被调用。函数的定义包含返回值类型(Return Type)、函数名称(Name)、参数(Parameters)和函数主体(Body)四个部分。函数定义的基本结构如下:
void functionName(parameter1, parameter2, parameter3)
{
// 函数主体部分
}
- 返回值类型:函数调用后返回值的数据类型。
void
代表函数没有返回值,如果返回值类型为整型,则为int
,如果是字符型,则为char
。 - 函数名称:每个函数一个描述性的名称,案例中函数名为
functionName
,命名规则与变量名的规则相同。 - 参数列表:函数可以通过参数接收数据。
parameter1
,parameter2
,parameter3
为函数的三个参数。参数的数量没有限制,每个参数必须确定数据类型。 - 主体:函数的主体是执行函数操作的语句集,它们包含在一组大括号{}中。
main函数在程序启动时自动调用,但所有其他函数都必须通过函数调用语句来执行。函数调用通过函数名称后跟一组圆括号和一个分号。如果函数有参数(Parameter)则调用时需要带参数值(Argument)。如:
int main()
{
functionName(argument1, argument2, argument3); //函数调用
return 0;
}
案例6-1
第10~13行定义了一个无返回值与无参数的函数,函数名为displayMessage。函数需要先定义然后才能调用。
第22行调用了displayMessage函数,由于是无参数的函数,调用时括号内不需要参数值。函数调用通过函数名称后跟一组圆括号和一个分号。
即使程序从 main 开始执行,函数 displayMessage 也是首先定义的。因为编译器在调用函数之前必须知道函数的返回类型、参数个数以及每个参数的类型,所以函数定义通常放在调用之前。 调用displayMessage函数之后会执行displayMessage函数的语句,执行完后继续执行main函数的语句。(后面会介绍也可以先声名,然后再定义,这样函数定义可以放在执行之后)。
函数原型/函数声明
函数调用之前不一定要进行函数定义,可以先进行函数声明。 函数的声明包含了函数的返回类型,函数名及函数的参数类型。
案例6-5
第6、7行进行了函数声明,结尾处需要加;
:
void first();
void second();
第12、13行进行了函数调用,函数调用在函数的定义(23~26行)之前。
传值函数
调用函数时,函数可以通过参数来接收数据。 参数(parameter)是一个特殊的变量,用于接收与保存传递给函数的参数值(argument)。
案例6-6
第6行进行了函数声明:声名了无返回值,1个整型参数的displayValue函数。第21~24进行了函数定义。
第11行进行了函数调用,将参数值5传入函数的参数。
//以下错误
displayValue(int x);
displayValue(int 5);
//以下正确
displayValue(x);
displayValue(5);
案例6-8
第6行进行了函数声明:声名了无返回值,3个整型参数的showSum函数。
cmath模块函数
C++ 有许多函数可以用于数学计算,例如 sqrt(平方根)、round(四舍五入)和 log(自然对数),只需要通过预处理指令包含<cmath>头文件。
#include <iostream>
#include <cmath> //需要包含cmath头文件
using namespace std;
int main() {
cout << sqrt(64) << "\n";
cout << round(2.6) << "\n";
cout << log(2) << "\n";
return 0;
}