假设现在我有三个源文件:ClassA.hpp、ClassB.hpp 和 ClassC.hpp。
ClassB继承自ClassA,ClassC继承自ClassB。
因此,在 ClassB.hpp 中,我编写了 #include "ClassA.hpp"。 那么ClassC.hpp中除了包含ClassB.hpp之外,是不是还包含ClassA.hpp呢?
编写 Makefile 时,是否应该将 ClassA.o 设为 ClassC.o 的依赖项? 在cmake中——如果我不在ClassC.hpp中编写#include“ClassA.hpp”,ClassA.o将不会成为ClassC.o的依赖项,对吧?这样可以吗?
最佳答案
ClassC.hpp是否需要ClassA.hpp的内容,暂时忽略ClassB.hpp?
如果是这样,那么是的,您应该包含它,而不是依赖可能发生变化的迂回意外包含。检查并设置正确的包含应该相对简单。依赖稍后可能会更改的另一个文件或行为是不好的做法,不应使用。
编辑:在问题适用的继承的情况下,情况有点不同。在这种情况下,您可以依赖需要A的B,并且可以说您不直接依赖A(如果B更改为从Q继承,则C可能不再需要A)。您想要查看 header 或类所依赖的内容,并包含提供该 header 或类的文件。如果它直接依赖于某些东西,请直接包含它。
使用 header 防护可以使多次包含 header 变得无害,并且在较大的代码库中很常见。
关于c++ - C/C++ 中的#include 是多余的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7830601/