何时在C++中使用类的声明

When is declaration of a class used in C++?

本文关键字:声明 C++ 何时      更新时间:2023-10-16

由于类定义是内部链接,因此我们必须在使用之前定义一个类。我无法弄清楚使用类声明的情况,例如class A;.有吗?

它用于前向声明;假设两个类有一个指向彼此实例的指针或提及:

 class A;
 class B;
 class A {
   class B*ptr;
   int x;
   /// etc
 };
 class B : A {
   std::string s;
   std::vector<A> v;
   //// etc
 };

它对于可读性也很有用;您可能希望在某个标头中首先列出所有类。

你可以只转发声明一个类,并简单地使用它的指针而不定义该类。

顺便说一下,C99 对 structunion 有类似的前向声明;前向声明函数也很有用。

这是一个前向声明,它是一种处理头文件中循环依赖关系的方法。

例如,如果两个类各自保存一个指向另一个类的指针,则需要转发声明在翻译单元中进一步定义的类。

您询问是否需要前向声明。

想象一下以下假设示例:

class Man
{ 
  Woman mySpouse;
};
class Woman 
{
  Man mySpouse;
};

我们必须在使用之前定义一个类。

是的。所以你可以看到上面的例子,这是不可能的先有鸡还是先有蛋的情况(又名循环依赖)。这就是为什么您需要前向声明和指针的原因,如下所示:

class Man;    // Forward declaration
class Woman;  // Forward declaration
class Man
{ 
  Woman * pMySpouse;
};
class Woman 
{
  Man * pMySpouse;
};

感谢前向声明,这应该可以正常工作。

查看此问题的答案:何时可以使用前向声明?