为什么 main.cpp 的头文件只需要包含
.h
头文件只包含声明而不包含实现?我可以在包含声明和实现的 cpp 文件中编写一个类,然后将该 cpp 文件作为头文件包含到 main.cpp 中吗?
如何包含不在此项目中的头文件?
2 回答
从技术上讲,头文件(或您决定使用的任何其他文件#include
)绝对可以包含作为一个整体构成完整 C++ 程序的任何内容。
当编译器(技术上称为“C 预处理器”的编译器包的一部分)#include "somefile.h"
在源代码中看到 a 时会发生什么,它会获取该文件,并且基本上将其“粘贴”到正在编译的主文件中。因此,您可以通过打开头文件、标记所有然后将其粘贴到主文件中来“假装”成为预处理器。
关于头文件的要点主要是避免将同一位C++复制粘贴到几个源文件中。因此,例如,可以将类的声明放入头文件myclass.h
中,将实际实现放入myclass.cpp
文件中,然后程序的另一部分使用myclass
只需要包含头文件即可。
不属于您的项目的头文件通常用尖括号括起来,#include <header.h>
包括来自其他项目的“header.h”。
标题真的很简单。他们所做的只是将 .h 文件中的代码副本粘贴到 #include 的位置。
C/C++ 需要知道对象的大小或参数的类型和数量,但它不需要知道实现。自由函数的默认链接总是外部的。所以通过写作int myFunc();
,你实际上是在写作extern int myFunc()
。只要该功能在不同的编译单元(已编译的 cpp 文件)中实现,就可以正常工作。
是的,您可以#include cpp 文件,但如果您实际编译您的“header.cpp”和“main.cpp”,您将在链接时遇到多重定义问题。只需将 .cpp 文件留在您的 make 文件或项目之外。许多库都.hpp
将其用作 C++ 头文件的扩展,这些头文件的整个实现是内联的。