自定义函数入门

基本概念

核心目的:避免重复造轮子,拒绝“复制粘贴”。

  • 代码复用:同样的功能(比如求两数最大值),不需要反复写相同的代码。
  • 模块化:将大问题拆解成小任务(像乐高积木一样)。
  • 易维护:如果需要修改某个功能,只需要改函数内部,其他地方调用它的不用动。

基本结构:五要素

返回值类型 函数名(参数1类型 参数1名, 参数2类型 参数2名) {
    // 函数体:具体执行的代码
    return 返回值; // 如果返回值类型是 void,这行可以省略
}

案例对比:无函数 vs 有函数

需求没有函数(直接在 main 里写)有函数(封装逻辑)
求两个数的和int a=3, b=5;
int s = a+b;
cout << s;
int add(int x, int y){
return x+y;
}
// 调用
cout << add(3,5);
优点分析虽然简单,但如果要求 100 次和,代码会很冗长一次编写,随处调用

实际操作流程

以求三个整数的最大值为例。

  1. 确定函数签名:
    • 返回值:最大值是数字(整数),所以需要用int表示返回值类型
    • 名字:见名知意,叫max3
    • 参数:三个整数,所以是int a,int b,int c
  2. 编写函数体:
int max3(int a, int b, int c) {
    if (a >= b && a >= c) {
        return a;
    } 
    else {
        if (c > b) return c;
        else return b;
    }
}
  1. 在main函数中调用
#include <iostream>
using namespace std;

// 注意:函数通常写在 main 函数之前(或者先声明)
int max3(int a, int b, int c) {
    if (a >= b && a >= c) {
        return a;
    } 
    else {
        if (c > b) return c;
        else return b;
    }
}

int main() {
    int x = 10, y = 20, z = 25;
    
    // 调用函数,将 x 传给 a,y 传给 b,z 传给 c
    int result = max3(x, y, z); 
    
    cout << "最大值是:" << result << endl; // 输出 25
    return 0;
}

形参与实参

  • 形式参数:定义函数时 (int a, int b, int c) 中的 a、b 和 c
    • 它们在函数没被调用时,不占用内存,也没有具体的值。
  • 实际参数:调用函数时 max3(x, y, z) 中的 x、y 和 z
    • 它们是 main 函数里真实存在的变量。

无返回类型:void

只做事情,不需要返回结果的函数,用void类型

// 打印10个星号,不需要返回任何数
void printStars() {
    for(int i = 0; i < 10; i++) {
        cout << "*";
    }
    // 这里没有 return 语句(或者可以写 return;)
}

int main() {
    printStars(); // 直接调用,不能赋值给变量
    return 0;
}

驼峰命名法

核心规则:多个单词组成一个名称时,第一个单词首字母小写,后续每个单词首字母大写。因为大写字母像驼峰,所以得名。

如:变量作用是学生名字,则通过student和name命名,根据驼峰命名法的规则,s小写,n大写,最终结果是studentName。