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!