Heim  >  Artikel  >  Backend-Entwicklung  >  Wie können Sie in C voneinander abhängige Klassen ohne unendliche Rekursion erstellen?

Wie können Sie in C voneinander abhängige Klassen ohne unendliche Rekursion erstellen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-12 08:38:02621Durchsuche

How can you create interdependent classes in C   without infinite recursion?

Interdependente Klassen in C: Verwendung von Vorwärtsdeklarationen

Der Versuch, zwei Klassen zu erstellen, die Objekte vom jeweils anderen Typ enthalten, führt direkt zu einem Problem von unendliche Rekursion. Um dies zu erreichen, ist eine Problemumgehung mithilfe von Zeigern und Vorwärtsdeklarationen erforderlich.

Im bereitgestellten Szenario verursacht die zirkuläre Abhängigkeit zwischen den Klassen foo und bar einen Fehler. Um dieses Problem zu lösen, werden Vorwärtsdeklarationen verwendet, um die Existenz jeder Klasse anzukündigen, ohne sie zu definieren:

// bar.h
#ifndef BAR_H
#define BAR_H

// Declares the existence of foo without defining it
class foo;

class bar {
public:
  foo* getFoo();
protected:
  foo* f;
};
#endif
// foo.h
#ifndef FOO_H
#define FOO_H

// Declares the existence of bar without defining it
class bar;

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

Diese Vorwärtsdeklarationen ermöglichen, dass die Kopfzeilen „foo“ und „bar“ unabhängig sind und der Zirkelverweis vermieden wird. Die vollständigen Definitionen jeder Klasse, einschließlich der Zeigermitglieder, werden dann in ihren jeweiligen .cpp-Dateien bereitgestellt.

Verwendungsbeispiel:

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

int main(int argc, char **argv) {
  foo myFoo;
  bar myBar;
}

Nun das Programm wird erfolgreich kompiliert, da die Vorwärtsdeklarationen es den Klassen ermöglichen, indirekt voneinander zu erfahren. Sie können jetzt Zeiger aufeinander speichern, wodurch der Kreislauf durchbrochen und die Erstellung voneinander abhängiger Klassen ermöglicht wird.

Das obige ist der detaillierte Inhalt vonWie können Sie in C voneinander abhängige Klassen ohne unendliche Rekursion erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn