文章

【GESP】C++四级考试大纲知识点梳理, (3) 模块化和函数

GESP C++四级官方考试大纲中,共有11条考点,本文针对第3条考点进行分析介绍。

(3)理解模块化编程思想,掌握函数的声明、定义及调用,掌握形参与实参的概念及区别。

四级其他考点回顾:


一、模块化编程

1.1 概念理解

模块化编程是一种把大程序分成若干小模块(模块 = 功能块)的方法。每个模块负责一个特定功能,像拼图一样组合起来形成完整的程序。

📝 举个例子:

比如要写一个“点外卖”的程序:

  • 登录模块
  • 点餐模块
  • 支付模块
  • 评价模块

每一部分可以分别编写,最后组合起来。这种拆分让程序更清晰、更容易维护。

✅ 优点:

  • 清晰结构:每个部分功能明确;
  • 复用性强:写一次,可多次使用;
  • 易维护:出现问题时容易定位。

二、函数

2.1 函数的作用

函数是实现模块化编程最基本的方式。函数就是一段可重复使用的代码块,可以用来完成特定任务。

比如:

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

这个函数就可以帮助我们进行加法计算。


2.2 函数的声明(说明它长什么样)

1
int add(int a, int b); // 告诉编译器有这样一个函数

2.3 函数的定义(写清楚它是怎么工作的)

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

2.4 函数的调用(让它为我们工作)

1
int result = add(3, 4); // 调用 add 函数,让它帮我们算 3 + 4

三、形参与实参

3.1 名词解释

  • 形参(形式参数):函数中写在括号里的变量,用来接收外部传入的数据(就像工具的输入口)。
  • 实参(实际参数):我们在调用函数时传进去的具体数值。

📝 举个例子:

1
2
3
4
5
int square(int x) {  // x 是形参
    return x * x;
}

int result = square(5); // 5 是实参

3.2 总结

比较项目形参实参
定义位置函数定义时函数调用时
是否有具体数值没有,只是变量名有,是具体的值
生命周期函数内部使用函数调用时确定

四、函数练习样例

写一个计算三角形面积的函数(已知底和高):

1
2
3
float triangleArea(float base, float height) {
    return 0.5 * base * height;
}

调用示例:

1
float area = triangleArea(4.0, 5.0); // 输出应为 10.0

有了函数,就像有了积木一样,可以把每个功能都封装起来,拼成更大的“程序城堡”。


五、小结

重点内容
模块化编程把程序拆成多个小功能,方便管理和复用
函数声明告诉程序有这个函数
函数定义编写函数具体内容
函数调用使用函数完成任务
形参与实参一个是“接收器”,一个是“传进来的值”

拓展一:函数命名空间

🧭 什么是命名空间(namespace)?

命名空间就像“姓氏”或“标签”,用来给变量、函数、类等加上一个作用域的名字,避免名字冲突。

举个例子:

你有两个同名的函数:

1
2
3
4
5
6
7
int add(int a, int b) {
    return a + b;
}

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

编译器会报错,因为它们名字一样,不知道该用哪个。加上命名空间就没问题了:

1
2
3
4
5
6
7
8
9
10
11
namespace Math1 {
    int add(int a, int b) {
        return a + b;
    }
}

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

使用时你就可以区分了:

1
2
int x = Math1::add(3, 4);  // 结果是7
int y = Math2::add(1, 2, 3); // 结果是6

🧩 那函数定义和命名空间到底有什么关系?

场景描述示例
函数在命名空间里定义函数属于该命名空间namespace Tool { void sayHi(); }
使用函数时没写命名空间找不到函数,编译报错需要写 Tool::sayHi()
使用 using 语句可以省略命名空间前缀using namespace Tool; sayHi();

🚨 注意点

  1. 命名空间就像“姓氏”一样重要,特别是当项目变大时。
  2. 如果不小心定义了多个名字相同的函数,不在命名空间中就容易冲突。
  3. 如果用 using namespace std;,就可以不写 std::,比如直接写 cout 代替 std::cout,但在大项目里要慎用

拓展二:std 命名空间

🔍 什么是 std 命名空间?

stdstandard(标准) 的缩写,是 C++标准库的命名空间

也就是说,C++自带的各种功能(如输入输出、字符串、容器等)都放在 std 命名空间里,防止与你自己写的函数或变量冲突。

🌟 举个例子:

我们常写的这句代码:

1
std::cout << "Hello, world!" << std::endl;

这句里有两个 std::

  • std::cout:标准输出流(显示文字)
  • std::endl:标准换行符

这两个东西都在 std 命名空间里。如果不写 std:: 就会报错。根据前面介绍,两种写法:

加上命名空间前缀:

1
std::cout << "Hello";

使用 using 指令:

1
2
using namespace std;
cout << "Hello"; // ✅ 现在可以省略 std::

⚠️ 小提醒:虽然 using namespace std; 很方便,但在大型项目中不推荐使用,容易出现命名冲突。


📦 std 命名空间中常见的内容

名称含义
cout输出(console output)
cin输入(console input)
endl换行符
string字符串类
vector动态数组
sort排序函数

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页

luogu-”系列题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

bcqm-”系列题目可在编程启蒙题库进行在线评测。

本文由作者按照 CC BY 4.0 进行授权