函数是一组一起执行任务的语句。每个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++函数,函数必须做一个定义。要使用函数,不调用或调用该函数。
当程序调用的函数,程序控制被转移到所调用的函数。一个名为函数定义执行任务时,被执行return语句或达到其函数的右括号,则返回程序控制返回到主程序。
要调用一个函数,只需要通过必要的参数以及函数的名称,如果函数返回一个值,那么可以存储返回值。例如:
#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