我是一名学生程序员,通过“Accelerated C++”一书学习我的第一语言。我正处于作者解释包含函数的头文件和源文件的地步。在本书提供解释的练习中,作者有包含函数定义的头文件,但由于源文件也有函数定义,这似乎是多余的。在这种情况下,在编写 C++ 时,头文件的意义何在?
示例:头文件。
#ifndef MEDIAN_H
#define MEDIAN_H
#include <vector>
double median(std::vector<double>);
#endif // MEDIAN_H
然后包含确定成绩中位数的函数的源文件:
// source file for the `median' function
#include <algorithm> // to get the declaration of `sort'
#include <stdexcept> // to get the declaration of `domain_error'
#include <vector> // to get the declaration of `vector'
using std::domain_error; using std::sort; using std::vector;
#include "median.h"
// compute the median of a `vector<double>'
// note that calling this function copies the entire argument `vector'
double median(vector<double> vec)
{
#ifdef _MSC_VER
typedef std::vector<double>::size_type vec_sz;
#else
typedef vector<double>::size_type vec_sz;
#endif
vec_sz size = vec.size();
if (size == 0)
throw domain_error("median of an empty vector");
sort(vec.begin(), vec.end());
vec_sz mid = size/2;
return size % 2 == 0 ? (vec[mid] + vec[mid-1]) / 2 : vec[mid];
}
中位数.h 被复制到中位数函数源文件中,即使源已经有定义vector<double> vec
本书解释它是无害的,实际上是一个好主意。但我只是想更好地了解这种冗余的原因。任何解释都会很棒!