Maison > développement back-end > C++ > Comment créer des classes C interdépendantes sans références circulaires ?

Comment créer des classes C interdépendantes sans références circulaires ?

Linda Hamilton
Libérer: 2024-11-09 22:20:04
original
1024 Les gens l'ont consulté

How to Create Interdependent C   Classes Without Circular References?

Création de classes interdépendantes en C

Cette question explore comment créer deux classes C contenant chacune un objet de l'autre type de classe. Cependant, cette approche directe conduit à une erreur due aux références circulaires.

Implémentation directe

Considérez les fichiers d'en-tête suivants, qui tentent de définir deux classes, foo et bar , chacun avec un membre protégé de l'autre type de classe :

// bar.h
#include "foo.h"
class bar {
  foo f;
};

// foo.h
#include "bar.h"
class foo {
  bar b;
};
Copier après la connexion

La compilation de ce code entraîne une erreur, car les deux en-têtes s'incluent et créent une référence circulaire.

Solution de contournement : déclarations avancées et pointeurs

Pour rompre ce cycle de référence, nous pouvons utiliser des déclarations avancées et des pointeurs. Les déclarations avancées nous permettent de déclarer l'existence d'une classe sans définir ses membres.

Les fichiers d'en-tête modifiés sont :

// bar.h

class foo; // Forward declaration of foo

class bar {
  foo* f;
};

// foo.h

class bar; // Forward declaration of bar

class foo {
  bar* b;
};
Copier après la connexion

Avec ces déclarations avancées, les en-têtes peuvent s'inclure les uns les autres sans créer une référence circulaire. La définition réelle des membres de la classe est ensuite placée dans les fichiers .cpp correspondants, où les en-têtes nécessaires sont inclus.

Utiliser des pointeurs

Pour utiliser les classes avec des pointeurs , nous créons des instances de foo et bar avec des pointeurs les uns vers les autres :

// main.cpp

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

int main() {
  foo myFoo;
  bar myBar;
  myFoo.f = &myBar; // Assign the address of myBar to myFoo's f
  myBar.b = &myFoo; // Assign the address of myFoo to myBar's b
}
Copier après la connexion

Cette solution de contournement nous permet de créer des classes avec des objets interdépendants à l'aide de pointeurs, rompant le cycle de référence et créant un programme valide.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal