Maison  >  Article  >  développement back-end  >  Comment créer des classes interdépendantes en C à l'aide de déclarations directes ?

Comment créer des classes interdépendantes en C à l'aide de déclarations directes ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-23 20:44:15897parcourir

How to Create Interdependent Classes in C   Using Forward Declarations?

Créer des classes interdépendantes en C via des déclarations directes

En C , comment peut-on établir une relation entre deux classes où chacune contient un objet de l'autre type de classe ?

Objet Direct Incorporation

Malheureusement, l'intégration d'objets de chaque classe directement dans l'autre n'est pas réalisable. Cette référence circulaire crée des besoins d'espace infinis.

Solution de contournement : relation basée sur un pointeur

Au lieu de cela, nous pouvons utiliser des pointeurs pour établir cette relation. Pour briser la dépendance circulaire, nous utilisons des déclarations directes.

Déclarations avant

Dans les en-têtes de classe (par exemple, bar.h et foo.h), nous déclarons le existence de l'autre classe sans la définir :

// bar.h
class foo; // Declare that the class foo exists

class bar {
public:
  foo* getFoo();
protected:
  foo* f;
};
// foo.h
class bar; // Declare that the class bar exists

class foo {
public:
  bar* getBar();
protected:
  bar* f;
};

Maintenant, chaque en-tête connaît l'autre classe sans son intégralité définition.

Implémentations de classe

Dans les fichiers .cpp correspondants, nous incluons l'autre en-tête pour accéder à sa définition complète :

// foo.cpp
#include "bar.h"

// ... Implementations of foo methods
// bar.cpp
#include "foo.h"

// ... Implementations of bar methods

Utilisation dans main()

Enfin, dans main.cpp, nous peut créer des instances des classes :

#include "foo.h"
#include "bar.h"

int main() {
  foo myFoo;
  bar myBar;
}

Cette stratégie nous permet de créer des classes qui s'utilisent les unes les autres sans encourir le problème de référence circulaire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn