C++在类中使用类

MWr*_*ght 4 c++

我有一个困扰我的基本问题.

在类中使用类时,我可以在头文件中定义要使用的类的标题.我已经看到了两种方法,并想知道这两种方法之间的区别?

EX1

#include "ClassA.h"

class ClassB {

   public:
     ClassB();
     ~ClassB();
     ClassA* a;
};
#endif
Run Code Online (Sandbox Code Playgroud)

ex2这是另一种方法.ClassA标头将在ClassB源文件中定义.

class ClassA;

class ClassB {

   public:
     ClassB();
     ~ClassB();
     ClassA* a;
};
#endif
Run Code Online (Sandbox Code Playgroud)

这两种方法有什么不同?

Alo*_*ave 9

classA当您包含类定义时,编译器会知道comlpete布局.

第二种语法称为前向声明,现在classA是编译器的不完整类型.

对于不完整类型,
您可以:

  • 将成员声明为指针或对不完整类型的引用.
  • 声明接受/返回不完整类型的函数或方法.
  • 定义接受/返回指向不完整类型的指针/引用的函数或方法(但不使用其成员)

但你不能:

  • 将它用作基类.
  • 用它来声明一个成员.
  • 使用此类型定义函数或方法.
  • 使用其方法或字段,实际上尝试取消引用具有不完整类型的变量.

因此,前向声明类可能会更快,因为编译器不必将整个代码包含在该头文件中,但它限制了如何使用该类型,因为它变为不完整类型.