1. 函数引入 #
比较两数的大小
#include <iostream> using namespace std; int main() { int a, b; cin >> a >> b; if(a > b) cout << a; else cout << b; }
适当的改写
#include <iostream> int max(int a, int b) // 自定义一个函数 { return a>b ? a:b; } int main() { int a, b; cin >> a >> b; cout << max(a,b); // 调用了一个我们自己定义的函数 }
2. 函数的结构 #
2.1 函数签名 #
int max(int a, int b) // 这个整体,一般称为“函数签名” 【基本结构】 返回类型 函数名 (形参1, 形参2, 形参3, ...)
2.2 函数体 #
// 一般,函数的第一个大括号区域,就是“函数体” // 注意,和 if 等语句不同,即使只有一条语句,大括号也不可以省略! { return a>b ? a:b; // return 表示是返回的参数 }
return 返回参数的类型,需要和函数签名中指定的一样。
3. 什么是声明、什么是实现 #
一般,我们也将“函数签名”,称为“函数的声明”
int maxab(int a, int b); // “函数签名”,也称为“函数的声明” 【基本结构】 返回类型 函数名 (形参1, 形参2, 形参3, ...)
一般,我们也将“函数签名”+“函数体”,称为“函数的实现”
其实,就是整个函数的完整定义。
int maxab(int a, int b) { return a>b ? a:b; }
请运行下面的代码。
#include <iostream> int maxab(int a, int b); // 请尝试,假如没有这句语句,程序可以编译吗? int main() { int a, b; cin >> a >> b; cout << maxab(a,b); // 调用 } int maxab(int a, int b) { return a>b ? a:b; }
假如没有上述这句话,程序将无法通过编译。
4. 函数调用的规则 #
C++ 规定,被调用函数,必须声明于调用之前。
思考:
分离函数的声明,是不是让程序变得更长了?而且很多余呢?
函数声明的分离,其实和头文件息息相关。
5. 头文件 #
5.1 建立工程 #
在之前的课程中,我们在DevC++中,仅仅演示了如何运行简单的程序,也就是一个cpp文件。
为了知识的完整性,我们在这给大家介绍一下DevC++中的“工程”概念。
C++中,一个完整的程序,一般包含以下部分
这个结构大家不需要死记硬背。以后就会慢慢建立起来这样的知识体系。
现在我们来看一下怎么建立一个 DevC++ 的工程。
建立工程/项目
完成建立
复制代码
代码可以从这里复制。
#include <iostream> using namespace std; int max_val(int a, int b); int main() { int a, b; cin >> a >> b; cout << max_val(a,b); return 0; } int max_val(int a, int b) { return a>b ? a:b; }
新建文件
修改文件 MathFunction.h
修改文件 MathFunction.cpp
修改文件 main.cpp
在 main.cpp 中的 main 函数中,我们调用了自己定义的函数 max_val()
而且,我们使用 #include 包含了自己编写的头文件。
#include "MathFunction.h"
下面,我们对头文件的意义,做一个总结。
5.2 头文件的意义 #
C++中约定,一个函数必须被声明之后,才可以调用。
所以,假如团队计划开发一个电脑游戏,那么大家将这样分工
一般来说,当游戏算法程序编写完成后,操控界面程序的开发者,才可以开始他的工作。
大家思考一下,这样需要多长时间,游戏才可以开发好呢?
所以,为了提高效率,头文件就显示了它的用武之地。游戏算法开发者,会先写一个头文件。
得到头文件的界面开发者,就可以直接开始他的工作了。
请大家想一像,现在需要多长时间,游戏才可以开发好呢?
所以,一般来说,
头文件中存放的是函数的声明
#include 函数的声明之后,就可以调用相关函数
头文件机制,利用了C++的特性“一个函数必须被声明之后,才可以调用”。而且,函数也不需要完全定义好。
5.3 头文件的符号 #
include 是C++中加载头文件的函数。它会自动完成头文件的加载。
但是,””和 < >有一些不同。
“”,表示从当前文件夹开始检索文件
<>,表示从系统路径开始检索文件,也就是“环境变量”
#include 支持相对路径和绝对路径