构造你的函数
在 main() 上方声明函数,并在 main 下方定义函数 在 main() 上方同时声明并定义函数。
随着 C++ 程序变得越来越复杂,你可能需要将代码分成多个文件。分开保存函数定义和声明有助于分割并组织你的代码。
我们看看函数测验中的这段代码。
# include <iostream> float distance(float velocity, float acceleration, float time_elapsed); int main() { std::cout << distance(3, 4, 5) << std::endl; std::cout << distance(7.0, 2.1, 5.4) << std::endl; return 0; } float distance(float velocity, float acceleration, float time_elapsed) { return velocity*time_elapsed + 0.5*acceleration*time_elapsed*time_elapsed; }
代码被组织成两个文件,而不是像以前的测验一样将所有内容都放到 main.cpp 中。看看下面的代码main.cpp
#include <iostream> float distance(float velocity, float acceleration, float time_elapsed); int main() { std::cout << distance(3, 4, 5) << std::endl; std::cout << distance(7.0, 2.1, 5.4) << std::endl; return 0; }
distance.cpp
float distance(float velocity, float acceleration, float time_elapsed) { return velocity*time_elapsed + 0.5*acceleration*time_elapsed*time_elapsed; }
打开一个终端并导航到包含这两个文件的文件夹。输入以下命令:
g++ main.cpp distance.cpp ./a.out
即可一起编译两个文件,然后执行该程序。
头文件
函数声明
float distance(float velocity, float acceleration, float time_elapsed);
通常也会单独创建一个文件。声明保存在所谓的头文件中,因为头是 main() 函数上方的信息。头文件扩展名通常为 .h 或 .hpp。下面的代码与上面相同,但在头文件中有函数声明。
main.cpp
#include <iostream> #include "distance.h" int main() { std::cout << distance(3, 4, 5) << std::endl; std::cout << distance(7.0, 2.1, 5.4) << std::endl; return 0; }
distance.h
float distance(float velocity, float acceleration, float time_elapsed);
distance.cpp
float distance(float velocity, float acceleration, float time_elapsed) { return velocity*time_elapsed + 0.5*acceleration*time_elapsed*time_elapsed; }
在main.cpp中多了一行include"distance.h"
现在,我们假设你想在不同的文件中重用你的 distance 函数。你所要做的,就是使用 include 语句在新文件的顶部声明函数:
# include "distance.h"
然后就可以在程序的另一部分使用该函数了。
将代码组织到不同的 .cpp 文件中,可以把声明与实现分离。此外,使用头文件意味着你不必记住如何进行函数声明,因为你可以用简单的语法将其包含在内
要编译代码,只需要编译 .cpp文件而不是 .h 文件即可:
g++ main.cpp distance.cpp
文件命名
命名约定规定,头文件和相关的 cpp 文件需使用相同的名称。因此,很显然,distance.h 包含了 distance.cpp 的头部声明。你还会注意到,函数本身名称为 distance()。因此,函数名、.cpp 文件和 .h 文件都是匹配的。
这些是命名约定。如果你不遵循这些约定,你的 C++代码仍然会被编译;但我们强烈建议你遵循这些约定。
Include 语法
你可能想知道,为什么有两种不同类型的 include 语句:
# include <iostream>
# include "distance.h"
带引号的 include 语句告诉程序在当前目录中查找 distance.h 文件。
> 语法则取决于你的 C++ 环境。通常,环境被设置为查找存储 C++ 库的文件,如标准库