【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(); |
🚨 注意点
- 命名空间就像“姓氏”一样重要,特别是当项目变大时。
- 如果不小心定义了多个名字相同的函数,不在命名空间中就容易冲突。
- 如果用
using namespace std;
,就可以不写std::
,比如直接写cout
代替std::cout
,但在大项目里要慎用。
拓展二:std 命名空间
🔍 什么是 std
命名空间?
std
是 standard(标准) 的缩写,是 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-”系列题目可在编程启蒙题库进行在线评测。