跳转到内容

C++ 函数基础

来自代码酷

C++函数基础[编辑 | 编辑源代码]

函数是C++程序中的基本构建块,它是一段可重复使用的代码,用于执行特定任务。函数可以接受输入参数,并可能返回一个值。使用函数可以提高代码的可读性、可维护性和复用性。

函数的基本结构[编辑 | 编辑源代码]

一个C++函数的基本语法如下:

返回类型 函数名(参数列表) {
    // 函数体
    return 返回值; // 如果返回类型不是void
}

组成部分详解[编辑 | 编辑源代码]

  • 返回类型:函数返回的数据类型(如int、float等),如果函数不返回值,则使用void
  • 函数名:函数的标识符,遵循C++命名规则
  • 参数列表:传递给函数的输入,可以有零个或多个参数
  • 函数体:包含实际执行的代码
  • return语句:将控制权返回给调用者,可能带有返回值

简单的函数示例[编辑 | 编辑源代码]

下面是一个计算两个数之和的简单函数:

#include <iostream>

// 函数声明
int addNumbers(int a, int b);

int main() {
    int num1 = 5;
    int num2 = 7;
    
    // 函数调用
    int result = addNumbers(num1, num2);
    
    std::cout << "The sum is: " << result << std::endl;
    return 0;
}

// 函数定义
int addNumbers(int a, int b) {
    return a + b;
}

输出

The sum is: 12

函数参数传递方式[编辑 | 编辑源代码]

C++中有三种主要的参数传递方式:

1. 按值传递[编辑 | 编辑源代码]

函数接收参数的副本,原始值不会被修改。

void increment(int x) {
    x++;
}

2. 按引用传递[编辑 | 编辑源代码]

函数接收参数的引用,可以修改原始值。

void increment(int &x) {
    x++;
}

3. 按指针传递[编辑 | 编辑源代码]

函数接收参数的指针,可以修改原始值。

void increment(int *x) {
    (*x)++;
}

函数重载[编辑 | 编辑源代码]

C++允许在同一作用域内定义多个同名函数,只要它们的参数列表不同(参数类型、数量或顺序不同)。

#include <iostream>

// 重载函数示例
void print(int i) {
    std::cout << "整数: " << i << std::endl;
}

void print(double f) {
    std::cout << "浮点数: " << f << std::endl;
}

void print(const char* s) {
    std::cout << "字符串: " << s << std::endl;
}

int main() {
    print(5);
    print(3.14);
    print("Hello");
    return 0;
}

输出

整数: 5
浮点数: 3.14
字符串: Hello

默认参数[编辑 | 编辑源代码]

C++允许为函数参数指定默认值,当调用函数时省略该参数时使用默认值。

#include <iostream>

void display(int a, int b = 20) {
    std::cout << "a = " << a << ", b = " << b << std::endl;
}

int main() {
    display(10);     // 使用b的默认值
    display(10, 30); // 覆盖b的默认值
    return 0;
}

输出

a = 10, b = 20
a = 10, b = 30

递归函数[编辑 | 编辑源代码]

函数可以调用自身,这种技术称为递归。

#include <iostream>

int factorial(int n) {
    if (n <= 1)
        return 1;
    else
        return n * factorial(n - 1);
}

int main() {
    int num = 5;
    std::cout << "Factorial of " << num << " is " << factorial(num) << std::endl;
    return 0;
}

输出

Factorial of 5 is 120

内联函数[编辑 | 编辑源代码]

使用inline关键字可以建议编译器将函数内联展开,以减少函数调用的开销。

#include <iostream>

inline int max(int a, int b) {
    return (a > b) ? a : b;
}

int main() {
    std::cout << "最大值是: " << max(10, 20) << std::endl;
    return 0;
}

输出

最大值是: 20

函数指针[编辑 | 编辑源代码]

C++允许使用指针来指向函数,这为回调函数和动态函数调用提供了可能。

#include <iostream>

int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

int main() {
    // 声明函数指针
    int (*operation)(int, int);
    
    operation = add;
    std::cout << "10 + 5 = " << operation(10, 5) << std::endl;
    
    operation = subtract;
    std::cout << "10 - 5 = " << operation(10, 5) << std::endl;
    
    return 0;
}

输出

10 + 5 = 15
10 - 5 = 5

实际应用案例[编辑 | 编辑源代码]

考虑一个简单的银行账户管理系统,使用函数来封装各种操作:

#include <iostream>
#include <string>

struct Account {
    std::string name;
    double balance;
};

// 显示账户信息
void displayAccount(const Account &acc) {
    std::cout << "账户名: " << acc.name << "\n余额: $" << acc.balance << std::endl;
}

// 存款
void deposit(Account &acc, double amount) {
    if (amount > 0) {
        acc.balance += amount;
        std::cout << "存款成功! 新余额: $" << acc.balance << std::endl;
    } else {
        std::cout << "无效的存款金额!" << std::endl;
    }
}

// 取款
void withdraw(Account &acc, double amount) {
    if (amount > 0 && amount <= acc.balance) {
        acc.balance -= amount;
        std::cout << "取款成功! 新余额: $" << acc.balance << std::endl;
    } else {
        std::cout << "无效的取款金额或余额不足!" << std::endl;
    }
}

int main() {
    Account myAccount {"张三", 1000.0};
    
    displayAccount(myAccount);
    deposit(myAccount, 500.0);
    withdraw(myAccount, 200.0);
    withdraw(myAccount, 2000.0); // 这个会失败
    
    return 0;
}

输出

账户名: 张三
余额: $1000
存款成功! 新余额: $1500
取款成功! 新余额: $1300
无效的取款金额或余额不足!

函数调用流程[编辑 | 编辑源代码]

sequenceDiagram participant 主函数 participant 被调函数 主函数->>被调函数: 调用函数(传递参数) 被调函数->>被调函数: 执行函数体 被调函数->>主函数: 返回结果(如果有)

数学函数示例[编辑 | 编辑源代码]

C++标准库提供了许多数学函数,例如:

#include <iostream>
#include <cmath>

int main() {
    double x = 2.0;
    
    std::cout << "平方根: " << sqrt(x) << std::endl;
    std::cout << "2的3次方: " << pow(2, 3) << std::endl;
    std::cout << "e的2次方: " << exp(2) << std::endl;
    std::cout << "自然对数: " << log(x) << std::endl;
    std::cout << "正弦值: " << sin(x) << std::endl;
    
    return 0;
}

输出

平方根: 1.41421
2的3次方: 8
e的2次方: 7.38906
自然对数: 0.693147
正弦值: 0.909297

总结[编辑 | 编辑源代码]

  • 函数是C++程序的基本构建块
  • 函数可以提高代码的复用性和可维护性
  • C++支持多种参数传递方式:值传递、引用传递和指针传递
  • 函数可以重载,允许同名函数有不同的参数列表
  • 递归函数可以解决某些特定类型的问题
  • 内联函数可以减少函数调用的开销
  • 函数指针提供了动态调用函数的能力

掌握函数的使用是成为高效C++程序员的关键步骤。通过合理设计和使用函数,可以创建结构清晰、易于维护的程序。