函数
函数
函数是执行某个任务的一组语句。每个 C++ 程序至少具有一个功能,即 main(),所有最琐碎的程序可以定义额外的功能。
你可以将代码分成单独的功能。怎样在不同的功能之间分配你的代码取决于你,但从逻辑上讲,这个划分通常是每个函数执行一个特定的任务。
一个函数 声明 用来告诉编译器函数的名字,返回值类型,和参数。一个函数的 定义 提供了函数的实际函数体。
C++ 标准库提供了众多的可以被您的程序直接调用的内置功能。例如,用 strcat() 函数来连接两个字符串,用 memcpy() 函数可以将一个内存位置的内容复制到另一个内存位置,还有更多的函数。
我们知道一个函数有着各种各样的名字诸如一种方法或子程序或一个程序等。
定义一个函数
C++ 函数的定义的一般形式如下所示:
return_type function_name( parameter list )
{
body of the function
}
一个 C++ 函数的定义由一个函数头和一个函数体组成。以下是一个函数的所有部分:
- 返回值类型: 一个函数可能返回一个值。 return-type 是该函数返回的值的数据类型。有些函数执行所需的操作不返回一个值,在这种情况下,return-type 是关键字 void.
- 函数名称: 这是函数实际的名字。函数名称和参数列表一起构成了这个函数的签名。
- 参数: 一个参数就像一个占位符。当调用参数时,你将把值传递给该参数。这个值称为实际参数或参数。参数列表是指一个函数的类型,顺序和参数的数目。参数是可选的,那就是指,一个函数可能不包含参数。
- 函数体: 函数体包含定义函数做什么的一系列语句。
例子
下面是一个叫做 max() 的函数的源代码。这个函数包含 num1 和 num2 两个参数,并返回两者之间的最大值:
// function returning the max between two numbers
int max(int num1, int num2)
{
// local variable declaration
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
函数声明
一个函数声明告诉编译器函数的名字和如何调用这个函数。函数的实际实体可以被单独定义。
函数声明有以下几个部分:
return_type function_name( parameter list );
对于上述定义的 max()
函数,以下是这个函数的声明:
int max(int num1, int num2);
参数的名称在函数声明中并不重要,但是参数的类型是必须有的,所以以下也是有效的声明:
int max(int, int);
当你在一个源文件中定义了一个函数并且在另一个文件中调用了该函数时,函数的声明是必需的。在这种情况下,你应该在调用该函数的文件的顶部声明这个函数。
调用函数
当你创建一个 C++ 函数时,你给出这个函数应该做什么的一个定义。若要使用一个函数,你将需要调用或唤起这个函数。
当一个程序调用一个函数时,程序控制转到所调用的函数。被调用的函数执行定义的任务,当执行到返回语句或函数执行到该函数结尾的右大括号时,它将程序控制返回给主程序。
要调用一个函数,你只需要传递所需的参数以及函数名,如果函数返回一个值,然后你可以存储返回的值。举个例子:
#include <iostream>
using namespace std;
// function declaration
int max(int num1, int num2);
int main ()
{
// local variable declaration:
int a = 100;
int b = 200;
int ret;
// calling a function to get max value.
ret = max(a, b);
cout << "Max value is : " << ret << endl;
return 0;
}
// function returning the max between two numbers
int max(int num1, int num2)
{
// local variable declaration
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
我将 max() 函数跟在 main() 函数后面然后编译源代码。当运行最终可执行文件时,它将产生以下结果:
Max value is : 200
函数参数
如果一个函数要使用参数,它必须声明接受参数值的变量。这些变量被称为函数的形参。
像其他本地变量一样,这些形参在函数中,在进入函数时创建,在退出函数时销毁。
当调用函数时,这里有两种方式可以将参数传递给函数。
调用类型 | 描述 |
---|---|
通过值调用 | 这个方法将参数的实际值复制到该函数的形参。在这种情况下,在函数中对该参数做出的更改对这个参数没有影响。 |
通过指针调用 | 这个方法将参数的地址复制到形参中。在函数的内部,这个地址用来在调用中访问这个实参。这意味着,对参数所做出的更改会影响参数。 |
通过引用调用 | 这个方法将参数的引用复制到形参中。在函数的内部,这个引用用来在调用中访问这个形参。这意味着,对参数所作出的更改会影响参数。 |
默认情况下, C++ 使用通过值调用来传递参数。一般情况下,这意味着,在函数内部的代码不能改变用来调用函数的参数的值,在上面提到的例子中,当调用 max() 函数时使用了。
参数的默认值
当你定义一个函数时,你可以为每个最后的参数指定一个默认值。当调用函数时,如果对 应的参数为空时,将使用此值。
这是在函数定义中通过使用赋值运算符和在函数定义中进行参数赋值完成的。如果当调用 该函数时,该参数的值没有被传递,则使用默认给定的值,但如果指定了一个值,这个默 认值被忽略,而使用传递的值。请考虑下面的示例:
#include <iostream>
using namespace std;
int sum(int a, int b=20)
{
int result;
result = a + b;
return (result);
}
int main ()
{
// local variable declaration:
int a = 100;
int b = 200;
int result;
// calling a function to add the values.
result = sum(a, b);
cout << "Total value is :" << result << endl;
// calling a function again as follows.
result = sum(a);
cout << "Total value is :" << result << endl;
return 0;
}
当上面的代码被编译和执行后,它将产生以下结果:
Total value is :300
Total value is :120
更多建议: