Zeiger speichern?
-
Hallo an alle!
ich habe eine kleine Verkettung von selbst erstellten Klassen aufgebaut, dazu benutze ich Zeiger auf die jeweiligen Klassen. Wenn ich aber das ganze Gebilde in einer Datei speichern will, wie mache ich das? Nach meinem Verständnis, zeigt ein Zeiger auf ein Objekt, welches sich im Hauptspeicher befindet. Der Zeiger beinhaltet also eine Hauptspeicheradresse. Wenn ich das Objekt nun in einer Datei abspeichere und später lade, dann wird es sich aller Voraussicht nach an einer anderen Stelle des Hauptspeichers befinden. Der Zeiger, der Bestandteil eines anderen Objektes ist (als Ausdruck der Verkettung), würde demnach auf die falsche Adresse im Hauptspeicher zeigen. Wie kann ich das realisieren, dass der Zeiger automatisch auf die richtige (neue) Adresse zeigt? Kann man so etwas, wie dynamische Zeiger benutzen oder vielleicht einen Zeiger auf eine Festplattenadresse benutzen? Und wie sollte ich das ganze Netz, welches ich aufgebaut habe, am besten abspeichern?
Vielen Dank!
Basti
-
Überlade den operator >> und << für Deine Klassen.
Das schreiben kannste dann wie gewohnt mit << machen und vor dem Auslesen
legst Du eine leere Klasse an und übergibst ihr die Daten mit >>.Die Klasse selbst muss dafür sorgen das sie ihre Daten brauchbar speichert und lädt.
-
Vielen Dank für die schnelle Antwort!
in meiner Klasse befinden sich auch Zeigerfelder, um die Verkettung zu realisieren. Wenn ich deine Antwort richtig verstanden habe, soll ich die Operatoren << und >> überladen, um meine Objekte zu speichern und zu laden. Aber wie kann ich denn die Daten brauchbar laden und speichern? Ich habe mir dazu gedacht, dass ich praktisch das Netz bei jedem Laden Schritt für Schritt neu aufbaue, um die korrekten (neuen) Zeiger-Adressen zu benutzen. Soll ich dazu die Zeiger in meinen jeweiligen Klasse selber speichern oder sollte ich eine neue Klasse für das Netz erstellen? (Wenn ich eine neue Klasse für das Netz erstellen sollte, könntest du mir noch verraten, wie ich das am besten anstelle??
)
Basti
-
s-bolz schrieb:
Aber wie kann ich denn die Daten brauchbar laden und speichern? Ich habe mir dazu gedacht, dass ich praktisch das Netz bei jedem Laden Schritt für Schritt neu aufbaue, um die korrekten (neuen) Zeiger-Adressen zu benutzen.
Richtig. Die Struktur im Speicher muss nicht unbedingt erhalten werden, wichtig ist, dass du sie beim Laden rekonstruieren kannst. So könnte man eine Liste abspeichern, in dem man die einzelnen Datenelemente hintereinander ablegt, ohne Verkettungen. Einen binären Suchbaum kann man auch ohne Verkettungen sequentiell abspeichern. Es kommt letztlich darauf an, wie deine Struktur aussieht.
-
Vielen Dank für die Hilfe!
Dann werd ich mir wohl einen ziemlich aufwendigen Algorithmus ausdenken müssen, um die Verkettung zu speichern. Es handelt sich nämlich um ein Netz, d.h. jedes Objekt hat mehrere Nachbarn, die untereinander auch noch miteinander verknüpft sein können. Da am Ende noch ein Benutzermenü aufgesetzt werden soll, kann man ja evtl. das Abspeichern und das Laden an den Eingaben im Menü steuern, um den Überblick über die einzelnen Verknüpfungen zu behalten. Würdet ihr sequentiellen Zugriff oder wahlfreien Zugriff empfehlen?
Basti
-
http://www.parashift.com/c++-faq-lite/serialization.html
Hab selbst mal ne Library dazu geschrieben, ist nicht soo schwer wie es aussieht.