C++基础教程(4):函数

在计算机编程中,函数是实现特定功能的语句集合。 当程序需要实现该功能时,只需要调用相应的函数,而且可以重复调用。编程人员可将程序分解成一个一个特定功能的函数,从而有利于程序的管理。

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函数的语句。(后面会介绍也可以先声名,然后再定义,这样函数定义可以放在执行之后)。

函数原型/函数声明

💡
函数原型(Function Prototype)也称为函数声明(Function Declaration)

函数调用之前不一定要进行函数定义,可以先进行函数声明。 函数的声明包含了函数的返回类型,函数名及函数的参数类型。

案例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;
}