在 C++ 中,函数是一组执行特定任务的代码块。函数可以接收输入(参数),执行操作,并可能返回输出(返回值)。使用函数可以使代码更加模块化,易于理解和维护。
以下是 C++ 函数的基本结构和用法:
函数定义
cpp复制代码
|
// 函数返回类型 函数名(参数列表) { |
|
// 函数体 |
|
// } |
|
|
|
// 示例:一个计算两个整数之和的函数 |
|
int add(int a, int b) { |
|
int sum = a + b; |
|
return sum; // 返回计算得到的和 |
|
} |
函数调用
cpp复制代码
|
int main() { |
|
int x = 5; |
|
int y = 10; |
|
int result = add(x, y); // 调用 add 函数,并将返回值存储在 result 变量中 |
|
std::cout << "The sum is: " << result << std::endl; |
|
return 0; |
|
} |
函数特性
· 返回类型:函数可以返回一个值,该值的类型在函数定义时指定。如果函数不返回任何值,则返回类型应为 void。
· 参数列表:函数可以接受任意数量的参数,每个参数都有一个类型。如果函数不接受任何参数,则参数列表为空。
· 默认参数:可以为参数指定默认值,这样调用函数时可以省略这些参数。
· 函数重载:可以使用相同的函数名但不同的参数列表来定义多个函数,称为函数重载。
· 作用域:函数在其定义的作用域内可见。在 C++ 中,通常函数定义在类的外部或命名空间内。
特殊类型的函数
· 构造函数和析构函数:在类中定义的特殊函数,分别用于初始化对象和清理对象资源。
· 拷贝构造函数和赋值运算符:用于处理对象拷贝和赋值的特殊函数。
· 转换函数:允许对象转换为其他类型的特殊函数。
函数指针和函数对象
· 函数指针:指向函数的指针,可以用于回调或作为参数传递。
· 函数对象(也称为仿函数):重载了 operator() 的类的对象,可以像函数一样调用。
Lambda 表达式
C++11 引入了 Lambda 表达式,允许在代码中定义匿名函数对象。Lambda 表达式特别适用于需要简短函数或回调函数的情况。
cpp复制代码
|
auto add = [](int a, int b) { return a + b; }; // Lambda 表达式定义了一个匿名函数 |
|
int sum = add(5, 3); // 使用 Lambda 表达式定义的函数 |
模板函数
模板函数允许定义与数据类型无关的函数。使用模板可以编写更加通用的代码。
cpp复制代码
|
template <typename T> |
|
T add(T a, T b) { |
|
return a + b; |
|
} |
|
|
|
int main() { |
|
int intSum = add<int>(5, 3); // 使用整数类型调用模板函数 |
|
double doubleSum = add<double>(5.0, 3.0); // 使用双精度浮点类型调用模板函数 |
|
return 0; |
|
} |
总结
C++ 函数是代码组织的基础,它们允许开发者将相关代码封装在一起,并通过参数和返回值实现代码之间的交互。合理使用函数可以提高代码的可读性、可维护性和复用性。