c ++的.h文件中的多个类?

时间:2015-03-27 08:05:57

标签: c++

我知道这可能是愚蠢的,但我无法理解这种情况的用法:

  1. 我有一个带有类定义和方法的.cpp和.h(比方说,类Class1)
  2. 在Class2的.h文件中,它在Class2的类定义之前编写了类Class1。
  3. 这是源代码的外观:

    Class1.h

    class Class1
    { //Class 1 definition}
    

    Class2.h

    class Class1;
    class Class2
    { //Class 2 definition}
    

    那么为什么类Class1 出现在Class2.h中呢?这是一个巨大的源代码,我厌倦了它,因为我无法理解整体流程。任何解释都会给予很大的帮助。谢谢你的帮助!

5 个答案:

答案 0 :(得分:5)

这是一份前瞻性声明。

你基本上告诉编译器Class1是其他地方的一个类。它不一定要知道它的实际结构。

这可用于避免循环引用以及剪切依赖性。

在您给出的示例中,如果您编辑Class1的内容,则不必仅使用Class2重新编译翻译单元,即使该类已知。

答案 1 :(得分:1)

class Class1;
class Class2
{ //Class 2 definition}
};

class Class1;是前向参考。您可以获取地址或引用Class1的对象。但你不能恭维它。只要实际的Class1定义不可见,就可以访问任何成员。

答案 2 :(得分:1)

如果Class2只需要指向Class1的指针,那么前向声明就是编译器需要定义Class1 *的所有内容。指向类的指针是编译器类型,只需要在某处存在类型的信息。

你在这里取得的成就是:

  • 没有循环引用(通常是建筑的床上气味)
  • 没有依赖
  • 少包含

答案 3 :(得分:0)

它被称为前瞻性声明。如果Class2使用Class1但尚未定义或实现Class1,则需要此。

答案 4 :(得分:0)

Class2的声明可能需要事先声明Class1,因为在Class2中使用了对Class1对象的指针或引用。也许它们存储为成员数据,或作为函数参数传递。

没有“Class Class1”;但是,C ++编译器不知道Class1是什么。

这个前向声明使编译比包含Class1的整个头文件更快。只要使用指针或Class1的引用,就不需要包含。