Erstellen voneinander abhängiger Klassen in C durch Forward-Deklarationen
Wie kann man in C eine Beziehung zwischen zwei Klassen herstellen, in denen jede ein Objekt von enthält? der andere Klassentyp?
Direktes Objekt Einbetten
Leider ist es nicht möglich, Objekte jeder Klasse direkt in die andere einzubetten. Dieser Zirkelverweis erzeugt einen unendlichen Platzbedarf.
Problemumgehung: Zeigerbasierte Beziehung
Stattdessen können wir Zeiger verwenden, um diese Beziehung herzustellen. Um die zirkuläre Abhängigkeit zu durchbrechen, verwenden wir Vorwärtsdeklarationen.
Vorwärtsdeklarationen
In den Klassenköpfen (z. B. bar.h und foo.h) deklarieren wir die Existenz der anderen Klasse, ohne sie zu definieren:
// 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; };
Jetzt weiß jeder Header von der anderen Klasse, ohne sie vollständig zu definieren Definition.
Klassenimplementierungen
In den entsprechenden .cpp-Dateien fügen wir den anderen Header ein, um Zugriff auf die vollständige Definition zu erhalten:
// foo.cpp #include "bar.h" // ... Implementations of foo methods
// bar.cpp #include "foo.h" // ... Implementations of bar methods
Verwendung in main()
Schließlich, in main.cpp, wir kann Instanzen der Klassen erstellen:
#include "foo.h" #include "bar.h" int main() { foo myFoo; bar myBar; }
Diese Strategie ermöglicht es uns, Klassen zu erstellen, die sich gegenseitig nutzen, ohne dass das Zirkelverweisproblem auftritt.
Das obige ist der detaillierte Inhalt vonWie erstelle ich voneinander abhängige Klassen in C mithilfe von Forward-Deklarationen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!