一、函数定义
函数是一组共同完成特定任务的语句。每个 C++ 程序至少有一个函数,即 main()
函数,并且最简单的程序也可以定义额外的函数。
你可以将你的代码分成不同的函数。如何将代码分割成不同的函数取决于你自己,但是逻辑上这种分割通常是使每个函数执行特定的任务。
函数声明告诉编译器函数的名字、返回类型和参数。函数定义提供函数的实际主体。
C++ 标准库提供了许多内置函数,你的程序可以调用它们。例如,函数 strcat()
用于连接两个字符串,函数 memcpy()
用于从一个内存位置复制到另一个位置等。
函数在不同的上下文中被称为方法、子程序或过程等等。
二、定义函数
C++ 函数定义的一般形式如下:
return_type function_name( parameter list ) {
body of the function
}
C++ 函数定义由函数头和函数体组成。以下是函数的所有组成部分:
-
返回类型:函数可能会返回一个值。return_type 是函数返回值的数据类型。有些函数执行所需的运算而不返回任何值,在这种情况下,返回类型是关键字
void
。
-
函数名称:这是函数的实际名称。函数名称和参数列表一起构成了函数签名。
-
参数:参数就像是占位符。当函数被调用时,你传递一个值给参数。这个值被称为实际参数或参数。参数列表指的是函数的类型、顺序和数量。参数是可选的;也就是说,函数可以不包含任何参数。
-
示例
以下是名为 max()
的函数的源代码。这个函数接受两个参数 num1
和 num2
并返回两者中的较大值:
int max(int num1, int num2) {
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;
int max(int num1, int num2);
int main () {
int a = 100;
int b = 200;
int ret;
ret = max(a, b);
cout << "最大值是 : " << ret << endl;
return 0;
}
int max(int num1, int num2) {
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
编译并运行上述代码后,会产生以下结果:
最大值是 : 200
五、函数参数
如果函数需要使用参数,它必须声明接受参数值的变量。这些变量称为函数的形式参数。
形式参数像函数内部的其他局部变量一样行为,并在进入函数时创建,在退出时销毁。
调用函数有两种方式传递参数:
-
值传递 这种方法将实际值复制到函数的形式参数中。在这种情况下,对参数所做的更改不会影响实参。
-
指针传递 这种方法将实参的地址复制到形式参数中。在函数内部,该地址用于访问实际的参数。这意味着对参数的更改会影响实参。
-
引用传递 这种方法将实参的引用复制到形式参数中。在函数内部,该引用用于访问实际的参数。这意味着对参数的更改会影响实参。
默认情况下,C++ 使用值传递来传递参数。一般来说,这意味着函数内的代码不能改变用来调用函数的参数,并且在上述 max()
函数调用中使用的也是这种方法。
六、参数默认值
当你定义一个函数时,可以为最后一个参数指定默认值。如果在调用函数时没有为相应的参数指定值,则使用默认值。
这是通过在函数定义中使用赋值运算符并为参数分配值来实现的。如果在调用函数时不为该参数传递值,则使用给定的默认值,但如果指定了值,则忽略默认值并使用传递的值。考虑以下示例:
#include <iostream>
using namespace std;
int sum(int a, int b = 20) {
int result;
result = a + b;
return (result);
}
int main () {
int a = 100;
int b = 200;
int result;
result = sum(a, b);
cout << "总值是 :" << result << endl;
result = sum(a);
cout << "总值是 :" << result << endl;
return 0;
}
编译并执行上述代码后,会产生以下结果:
总值是 :300
总值是 :120