Objektzeiger
-
Hi,
bin leider noch ganz frisch auf dem Gebiet.
Ziel ist es eine Datei mit Punkten einzulesen, mit diesen Punkten diverse Berechnungen durchzuführen und die neuen Punkte in der anderen Datei ausgeben.
Das Programm lief auch schon, mit 3 Klassen: Einlesen, Berechnen, Ausgeben.Nur hat das unserem Aufgabensteller nicht gereicht. Er möchte eine 4te Klasse in der NUR die Punkte als private stehen und die zugehörigen Getter- und Settermethoden. Da hängts bei mir nun etwas. Die Klasse hab ich erzeugt, nur der Zugriff ist mir nicht klar. Hier mal etwas Code:
Klasse Einlesen:
void Einlesen::einlesen(){ fstream datei1("C:\\Temp\\punkte.txt"); int i = 0; while(datei1.good()){ stringstream sstr; getline(datei1, buffer); sstr << buffer; sstr >> zeile[i]; i++; } datei1.close(); Punkte *newPunkte; newPunkte = new Punkte; newPunkte->setYA(zeile[0]); newPunkte->setXA(zeile[1]); . . . . }Hier erzeuge ich jetzt einen Zeiger auf das Objekt der neuen Klasse Punkte und setze alle Punkte.
Jetzt will ich aus der Klasse Berechnen aber auf diese Punkte zugreifen. Wenn ich ein neues Punkte Objekt erzeuge sind die alten ja weg...Also muss ich den Zeiger auf das Punkte Objekt irgendwie übergeben, soweit bin ich schon. Ich weiß nur nicht wie

Kann mir da jmd helfen ?
-
Ich verstehe nicht, warum du zum einlesen, rausschreiben und berechnen Klassen verwenden möchtest. Es handelt sich hierbei schon im deutschen Wortgebrauch um Tätigkeitswörter. Klassen bzw. deren Objekte sind hingegen meiner Auffassung nach als Subjekte aufzufassen, Daten, denen mit einer gewissen Anzahl von Operationen eine Semantik zugeordnet wird. Wenn das einlesen, berechnen und schreiben der Punkte etwas ist, das sich ausschließlich auf diese Punkte bezieht (irgendwelche speziellen dinge), dann wäre zu überlegen, diese Funktionen als Member der Punkte-Klasse anzulegen. Hingegen macht es meiner Meinung nach überhaupt keinen Sinn, eine Klasse zu erstellen, die nur dafür zuständig ist, Daten für eine andere einzulesen oder zu schreiben.
Mein Pseudocode für dieses Problem sähe vielleicht so aus:
void lesePunkte( Punkte& p ) { // ... } void schreibePunkte( Punkte& p ) { // ... } void berechne( Punkte& p ) { // ... } int main() { Punkte p; lesePunkte( p, "datei.a" ); berechne( p ); // oder: // p.berechneEtwas(); // falls sich die Operation nur auf Daten bezieht, die in den Bereich von Punkten fallen schreibePunkte( p, "datei.b" ); return 0; }Dein Problem erkennt man schon daran, dass die gesamte Logik deiner Einlesen-Klasse in deren Konstruktor abgehandelt wird. In dem Objekt werden gar keine Daten verwaltet und mit einer übersichtlichen Schnittstelle nach außen repräsentiert - hier wird einzig und allein im Konstruktor eine Datei gelesen.