C++ 头文件(header files)是包含声明和宏定义的文件,通常具有 .h 或 .hpp 扩展名。头文件用于在多个源文件之间共享代码。头文件通常包括类的声明、函数原型、常量定义、宏定义和其他类型的声明。本文主要介绍C++ 中的头文件。

1、.h头文件

头文件是扩展名为 .h 的文件,包含了 C 函数声明和宏定义,被多个源文件中引用共享。有两种类型的头文件:程序员编写的头文件和编译器自带的头文件。在程序中要使用头文件,需要使用 C 预处理指令 #include 来引用它。前面我们已经看过 stdio.h 头文件,它是编译器自带的头文件。引用头文件相当于复制头文件的内容,但是我们不会直接在源文件中复制头文件的内容,因为这么做很容易出错,特别在程序是由多个源文件组成的时候。

一般把所有的常量、宏、系统全局变量和函数原型写在头文件中,在需要的时候随时引用这些头文件。

头文件通常包含类、函数、常量等的声明。

使用示例,

#include<iostream>
using namespace std;

#ifndef MYCLASS_H
#define MYCLASS_H

class MyClass {
public:
    MyClass();   // 构造函数声明
    void sayHello();  // 成员函数声明
};

#endif


int main() {
  cout << "Hello, World!";
  return 0;
}

2、引用头文件

用预处理指令 #include 可以引用用户和系统头文件。

可以使用#include <file> 或 #include "file"方式引用。

相关文档: C语言中#include <filename> 和 #include "filename"的区别

例如,

#include "MyClass.h"  // 引用头文件

int main() {
    MyClass myObject;  // 使用声明的类
    myObject.sayHello();  // 调用类的成员函数
    return 0;
}

注意:

1)有条件引用是要从多个不同的头文件中选择一个引用到程序中。

#ifdef _WIN32
    #include "windows_specific.h"  // Windows特定的头文件
#elif defined(__linux__)
    #include "linux_specific.h"    // Linux特定的头文件
#else
    #include "default_header.h"    // 其他平台使用的默认头文件
#endif

2)如果头文件比较多,使用#if条件比较麻烦,则可以使用宏替换的方式引用。

// 定义平台相关的宏
#if defined(_WIN32)
    #define PLATFORM_HEADER "windows_header.h"
#elif defined(__linux__)
    #define PLATFORM_HEADER "linux_header.h"
#else
    #define PLATFORM_HEADER "default_header.h"
#endif
// 使用宏来引用头文件
#include PLATFORM_HEADER

3、C++与C语言头文件的区别

C++与C语言的头文件有一些显著的区别,主要体现在功能、结构以及编程范式上。C语言的头文件通常用于声明函数、宏定义、结构体等,比较简单直接,并且采用#ifndef#define#endif来防止多重包含。C++的头文件不仅包含这些内容,还支持面向对象编程,通常会包括类的声明、成员函数的定义、运算符重载、构造函数和析构函数等。此外,C++还支持模板(template),因此模板类和模板函数常常出现在头文件中。

在C++中,头文件常包含命名空间(namespace)声明,以组织不同的功能模块,避免命名冲突。而C语言则没有命名空间的概念。C++还引入了#pragma once指令,简化了防止多重包含的机制,替代了传统的宏防护。

C++的头文件中,还常见内联函数(inline),它们通常用于类的成员函数,并且可以在头文件中定义,而C语言中的内联函数则较少使用。C++支持更多的标准库功能,如STL(标准模板库),提供了容器、算法、输入输出流等,而C语言则主要包含一些基本的输入输出和内存管理功能库。

1)C语言的头文件都是以.h结尾,如stdio.h、math.h。

2)C++的头文件保留了C中的头文件风格,大部分c的头文件都可以在C++中使用,也可以自定义C类型头文件在C++中使用。

3)C语言的标准头文件在C++中去掉了.h后缀,添加了C前缀,如math.h改为cmath。

4)C++自身的头文件,不带后缀,如iostream,其最大的不同就是c++类型的头文件可以包含命名空间,而.h后缀的则不行。

推荐文档