C++ 函数 (Functions in C++)
函数是 C++ 中的基本构造块之一,它可以封装一段代码,通过调用函数来重复执行某些操作。函数能够提高代码的可读性、可维护性和重用性。
1. 函数定义
在 C++ 中,函数的定义包括以下几个部分:
- 返回类型 (Return Type): 指定函数返回的数据类型。
- 函数名 (Function Name): 用于标识函数的名字。
- 参数列表 (Parameters): 包括函数接收的输入数据(可选)。
- 函数体 (Function Body): 包括函数的代码块,定义了函数的操作。
语法
return_type function_name(parameter_list) {
// 函数体
// 执行任务
}
示例:定义一个简单的函数
#include <iostream>
using namespace std;
void sayHello() {
cout << "Hello, C++!" << endl;
}
int main() {
sayHello(); // 调用函数
return 0;
}
输出:
Hello, C++!
2. 函数返回值
函数可以有返回值,返回类型可以是 int、float、double 等基本数据类型,也可以是自定义类型。
返回值类型
如果函数需要返回值,必须指定返回类型,函数体内使用 return 语句来返回结果。
示例:带返回值的函数
#include <iostream>
using namespace std;
int add(int a, int b) {
return a + b; // 返回两个数的和
}
int main() {
int result = add(5, 3); // 调用函数
cout << "The sum is: " << result << endl; // 输出返回值
return 0;
}
输出:
The sum is: 8
3. 函数参数
函数参数可以是值传递,也可以是引用传递。值传递是将参数的副本传递给函数,引用传递则是将参数本身传递给函数。
值传递
在值传递中,函数对参数的修改不会影响原始数据。
示例:值传递
#include <iostream>
using namespace std;
void modifyValue(int a) {
a = 10; // 修改参数
}
int main() {
int x = 5;
modifyValue(x); // 调用函数
cout << "Value of x: " << x << endl; // 输出原始值
return 0;
}
输出:
Value of x: 5
在这里,x 的值没有改变,因为参数是按值传递的。
引用传递
通过引用传递参数时,函数对参数的修改会影响原始数据。引用传递需要使用 & 符号来指定。
示例:引用传递
#include <iostream>
using namespace std;
void modifyValue(int &a) {
a = 10; // 修改参数
}
int main() {
int x = 5;
modifyValue(x); // 调用函数
cout << "Value of x: " << x << endl; // 输出修改后的值
return 0;
}
输出:
Value of x: 10
这里,x 的值被修改了,因为参数是按引用传递的。
4. 默认参数 (Default Arguments)
C++ 允许函数参数提供默认值,如果调用函数时没有提供某个参数的值,函数会使用默认值。
语法
return_type function_name(parameter1 = default_value1, parameter2 = default_value2, ...) {
// 函数体
}
示例:使用默认参数
#include <iostream>
using namespace std;
void printMessage(string message = "Hello, world!") {
cout << message << endl;
}
int main() {
printMessage(); // 使用默认参数
printMessage("Custom message"); // 使用自定义参数
return 0;
}
输出:
Hello, world!
Custom message
5. 函数重载 (Function Overloading)
C++ 支持函数重载,即多个函数具有相同的名称,但参数的数量或类型不同。编译器根据调用时传递的参数类型来选择正确的函数。
示例:函数重载
#include <iostream>
using namespace std;
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
int main() {
cout << "Integer sum: " << add(5, 3) << endl;
cout << "Double sum: " << add(2.5, 3.7) << endl;
return 0;
}
输出:
Integer sum: 8
Double sum: 6.2
6. 匿名函数 (Lambda Functions)
C++11 引入了匿名函数(Lambda 函数)。Lambda 函数是定义在函数内部的没有名字的函数。它允许直接在代码中定义一个内联的函数。
语法
[捕获列表](参数列表) -> 返回类型 {
// 函数体
}
示例:Lambda 函数
#include <iostream>
using namespace std;
int main() {
auto add = [](int a, int b) -> int {
return a + b;
};
cout << "Sum: " << add(5, 3) << endl;
return 0;
}
输出:
Sum: 8
总结
C++ 中的函数用于封装可重复执行的代码块,具有以下特性:
- 函数定义:包括返回类型、函数名、参数列表和函数体。
- 返回值:函数可以返回某个值,或没有返回值(
void)。 - 参数传递:可以使用值传递或引用传递。
- 默认参数:允许在函数参数中设置默认值。
- 函数重载:允许多个函数具有相同的名称,但参数列表不同。
- Lambda 函数:匿名函数用于在函数内部定义临时的小功能块。
理解和运用好这些特性,可以大大提高 C++ 编程的灵活性和可维护性。