使用继承时,必须“#include”子类父类的头文件。 C ++

时间:2015-02-15 22:49:32

标签: c++ header-files multiple-inheritance

我正在使用C ++开发一个多继承项目。我有类定义(.h)和实现(.cpp)的单独文件。由于这是我第一次在C ++中使用继承(我们的其他任务已经在C#中),有些事情有点不清楚。

我需要在#include "parent.h"child.cpp,还是在child.h中定义继承关系就足够了,即:

class child : parent 
{ 
     // child class definition
};

我被一个自动提示警告,这可能是一个主观问题,所以让我明确一点:我问这是否是功能要求继承才能正常工作,而不是这是“良好形式”或其他任何方面。

2 个答案:

答案 0 :(得分:6)

<强>问题

  

我需要#include "parent.h"中的child.cpp,还是在child.h

中定义继承关系就足够了

<强>答案

  

不,您不需要#include "parent.h"中的child.cpp。在#include "child.h"child.cpp就足够了。由于"parent.h"已有child.cpp

child.h中提供了#include "parent.h"的内容

答案 1 :(得分:2)

以防这一点不明确:
#include执行简单的文本复制,不涉及其他逻辑。

所以不,没有必要。但原因并不是你已经定义了继承关系,而是因为 #include "parent.h"中的child.h已将parent.h的文本复制到child.h,然后#include child.h复制child.cpp,复制整个文本(包括parent.h)那里。另一个包含冗余,如果没有包含保护,它甚至会导致编译器错误。

顺便说一下:概念上,您的编译器没有将头文件视为单独的实体。它只看到一个文本流,它是通过从cpp文件开始然后执行(递归)所有#include指令而产生的。