0

我不确定会发生什么,但请采取以下措施:

class A{

}

-

class B{
 #include "A.h"
}

-

class C{
 #include "B.h"
}

现在,如果我在 C 类中编写代码,是否意味着 A 类也自动包含在内?据我了解,#include 基本上是当场复制整个文件。

谁能详细说明这一点?

我正在尝试尽可能多地使用类转发。但有时我根本做不到。

编辑:

上面的类不在同一个文件中。想象他们分开了。

编辑二:让我把它放在更多的背景下。

假设我正在创建一个包含类 B 的新类,但随后我声明了一个类型为 A 的变量。即使我从未将 A 包含到该类中,这似乎也可以编译。这就是它在 C++ 中的表现吗?

4

3 回答 3

2

这基本上会在 class 中声明一个名为 A的嵌套B类。

include指令应该位于文件顶部以外的任何其他位置的情况非常罕见,并且通常具有与您所拥有的完全不同的目的。

如果我正确理解了您的文件层次结构,则相当于:

//A.h
class A{

};

//B.h
class B{
  class A{

  };
};

//C.h
class C{
  class B{
    class A{

    };
  };
};
于 2012-08-13T17:52:32.397 回答
1

你是对的,预处理器只是复制标题。如果你愿意,可以把它想象成一个长宏。

于 2012-08-13T17:52:57.767 回答
1

指令只是告诉编译器#include假装指定文件中的文本已写入#include指令出现的位置。它与作用域、语法或其他任何东西无关。它只是文本。

如果没有看到 Ah 和 Bh 的内容,就不可能再说出这些#include指令的效果。

于 2012-08-13T17:57:04.210 回答