. 函数定义与调用
在创建函数时,必须编写其定义。所有函数定义包括以下组成部分:
名称:每个函数都必须有一个名称。通常,适用于变量名称的规则同样也适用于函数名称。
形参列表:调用函数的程序模块可以向其发送数据。形参列表是保存传递给函数的值的变量列表。如果没有值传递给函数,则其形参列表为空。
主体:函数的主体是处理函数正在执行的任务的一组语句。这些语句包含在一组大括号中。
返回类型:函数可以将值发送回调用它的程序模块。返回类型是要发送回的值的数据类型。
空函数:如前所述,函数可以返回一个值。教程中介绍过的所有程序中的 main 函数都被声明为向操作系统返回一个 int 值。"return 0;" 语句使得当 main 函数完成执行时返回值 0。然而,并不是所有函数都一定要返回值。某些函数只需执行一个或多个语句,然后返回。在 C++ 中,这样的函数称为空函数。下面显示的 displayMessage 函数就是一个空函数示例:
void displayMessage()
{
cout << "Hello from the function displayMessage.\n";
}
该函数的名称是 displayMessage,意思是“显示消息”,它是一个描述性的名称,说明了函数的功能。函数就应该按这种方式命名,即通过名称揭示其功能。因为该函数不需要接收任何信息以执行其任务,所以它的括号中没有形参列表。该函数的返回类型是 void。这意味着函数在完成执行后不返回值,并返回到调用该程序的部分。因为没有返回值,所以不需要 return 语句。当函数中的语句己经完成执行并且遇到结束函数的封闭大括号时,程序将自动返回
调用函数将导致函数的执行。函数 main 在程序启动时自动调用,但所有其他函数必须由函数调用语句执行。当一个函数被调用时,程序分支到该函数并执行其主体中的语句。
2.递归函数与重载函数
递归即递推+回归。递归算法是把问题转化为规模缩小了的同类子问题,然后递归调用函数(或过程)来表示问题的解。递归算法的特点:1.必须有 递归函数 + 递归出口2.递归算法解题通常显得简洁,但效率较低且系统通过栈来储存每一层的返回点、局部变量,递归次数过多容易造成栈溢出。
在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是 int、float、char、bool 等,我们需要通过参数把变量的地址传入函数内部。在C语言中,程序员往往需要分别设计出三个不同名的函数, 。C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading)。借助重载,一个函数名可以有多种用途
int add(int a, int b) {
return(a + b);
}
float add(float c, float d) {
return(c + d);
}