Bräuchte hilfe beim vereinfachen einer Objektausgabe. Bzw. bei einer Objektüberprüfung...
-
Naja ich hab's ganz einfach gemacht.
Ich hab mir ein Integer angelegt der bei jedem geborenen Kind dem Integer 1 dazuaddiert.
Dann einfach bei der Zeigefunktion einfach eine forschleife von n bis anzahl der Kinder. Naja nicht gerade schön, aber war jetzt der schnellste Weg.Danke euch trotzdem.
-
So jetzt habe ich ein kleines Problem...
kinderanzahl ist ein integervariable funktioniert auch soweit

Diese Funktion erstellt ein Kindobjekt
Mensch * Frau::kind (int z, char * n) { kinder[z] = new Mensch (n); kinderanzahl += 1; return kinder[z]; }Diese Funktion zeigt die Familie an.
void Frau::zeige_familie() { cout << "aktueller Familienstatus : " << endl; cout << "Ehemann: " << ehemann->get_name() << endl; if (kinderanzahl == 0) { cout << "Keine Kinder\n"; } else { for (int n = 0; n < kinderanzahl; n++) { cout << "Kind " << n + 1 << " : " << kinder[n]->get_name() << endl; } } cout << "\n\n"; }Mit dieser Funktion wollte ich erreichen, daß alle Objekte neu sortiert werden und das letzte Objekt was ja jetzt doppelt ist gelöscht wird. Aber sobald das delete kommt funktionert meine Funktion zeige_famielie nicht mehr. Ich weiß nicht warum, obwohl kinderanzahl auch wieder um 1 verringert wird. Sobald ich das delete weg mache funktioniert meine zeige_familie funktion einwandfrei, aber der nachteil ist, daß das Objekt noch existiert.
Nach der Logik sollte es doch so funktionieren, oder?
Sortiert die Objekte neu und sollte das letze Objekt löschen.
void Frau::stirbtKind(int n) { for (int b = n; b < kinderanzahl - 1; b++) { kinder[b] = kinder[b+1]; } delete kinder[kinderanzahl -1]; // <---- Hier das Problem kinderanzahl -= 1; }Ich hoffe mir kann jemand sagen woran das Problem liegt.
Vielen Dank.
-
Hallo
bluecode hat dich bereits auf std:.vector aufmerksam gemacht, das übernimmt dür dich das Verwalten des dynamischen Arrays selber.
Bei deiner methodestirbt fällt auf, das du zuerst die nachfolgenden Objekte vorverschiebst und erst dann das eltzte löscht.
Du must aber zuerst das Objekt an Stelle n löschen, und dann die nachvollgenden Objekte alle um eins nach vorne verschieben.bis bald
akari
-
DragonShaolin schrieb:
void Frau::stirbtKind(int n) { delete kinder[n]; // Oder willst du nicht das n-te Kind löschen? for (int b = n; b < kinderanzahl - 1; b++) { kinder[b] = kinder[b+1]; } kinderanzahl -= 1; }edit: Da war wohl jemand schneller

-
ok das mit dem Vektor verstehe ich noch nicht ganz.
Ist irgendwie unlogisch das man erst ein objekt löscht und dann neu sortiert. Ich dachte dann würde ein Objekt fehlen beim sortieren. Naja es geht jetzt.
Danke dir.
-
Cyrill Roth schrieb:
ok das mit dem Vektor verstehe ich noch nicht ganz.
Mit vector ist der std::vector gemeint. Das ist eine Template Klasse welche für genau solche Zwecke geschaffen wurde

Ist irgendwie unlogisch das man erst ein objekt löscht und dann neu sortiert. Ich dachte dann würde ein Objekt fehlen beim sortieren.
Du löscht doch das Objekt, d.h. danach ist es _weg_ und du brauchst es nicht mehr mitsortieren. Bei deinem Code hast du sowieso das falsche Objekt gelöscht

edit: Yeah 400

-
Na gut dann sollte ich mir mal die Templates anschauen...
Ähm kann mir grad noch jemand sagen wie ich jetzt meine zeige_familie abändere, wenn der Ehemann stirbt? Also eine Abfrage ob das Objekt noch existiert. Nachdem ich mit delete Ehemann gearbeitet habe.
void Frau::zeige_familie() { cout << "aktueller Familienstatus : " << endl; //if (ehemann != NULL) cout << "Ehemann: " << ehemann->get_name() << endl; cout << "Ehemann: " << ehemann->get_name() << endl; if (kinderanzahl == 0) { cout << "Keine Kinder\n"; } else { for (int n = 0; n < kinderanzahl; n++) { cout << "Kind " << n + 1 << " : " << kinder[n]->get_name() << endl; } } cout << "\n\n"; }Sorry für die Fragerei...
Danke euch...
-
abfragen ob existiert:
if (ehemann == 0)blablablalöschen:
delete ehemann;
ehemann = 0;Normalerweise nimmt man 0 um anzuzeigen, dass das Objekt auf das ein Pointer zeigt noch nicht existiert bzw. bereits gelöscht wurde.
-
Jupp danke, hab ich auch gerade hinbekommen

Super Sache

Bald ist mein Programm fertig.
Dann noch der feinschliff. Naja dann hätte ich ja viel zu tun

-
Kann mir jemand noch sagen wie ich eine Pausefunktion in meinem Programm einbinde? Ich hab mal irgendwas von einer Sleep() Funktion gehört. Unser Prof hat in seiner Aufgabenstellung reingeschrieben das wir eine for-schleife machen sollen, aber das ist ja dann Rechnerabhängig.
-
Hallo
Ich hab mal irgendwas von einer Sleep() Funktion gehört
Dann benutz doch mal die Suchfunktion...
bis bald
akari
-
ok mußte nur die Windows.h einbinden
und dann einfach Sleep(zeit)