blog.dopana

Back

C++入门系列第四篇。函数让你给一段代码命名、接收输入,并从任何地方调用它——这是组织任何程序的核心工具。

为什么用函数#

函数让代码可复用、可测试、可读。与其复制同样的逻辑,不如写一次、调用多次。

第一个函数#

#include <iostream>

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

int main() {
    int result = add(3, 4);
    std::cout << result << '\n';  // 输出 7
}
cpp

add 接收两个 int 参数,返回 int。这里的 34 是实参。

返回类型与 void#

如果函数不产生值,返回类型就是 void

void greet(std::string name) {
    std::cout << "Hello, " << name << "!\n";
}
cpp

前置声明#

要在定义之前调用函数(例如跨文件拆分代码),先声明它:

int multiply(int x, int y);   // 声明

int main() {
    std::cout << multiply(6, 7) << '\n';
}

int multiply(int x, int y) {  // 定义
    return x * y;
}
cpp

声明必须与定义完全一致。

按值传递参数#

默认情况下,C++ 把实参复制到形参中。函数内部的修改不会影响调用者:

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

int main() {
    int a = 5;
    increment(a);
    std::cout << a << '\n';  // 仍是 5
}
cpp

要修改调用者的变量,需要传引用——下一篇会介绍。

默认实参#

参数可以有默认值:

void print(std::string msg, int times = 1) {
    for (int i = 0; i < times; ++i) {
        std::cout << msg << '\n';
    }
}

print("hi");        // 输出一次
print("hi", 3);     // 输出三次
cpp

函数重载#

只要参数列表不同,多个函数可以同名:

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

编译器根据实参类型选择正确的版本。

结论#

函数是C++程序的积木:声明、定义、调用、复用。本系列下一篇:指针与引用。

参考资料#