Attributwerte löschen
-
Hallo!
Ich hab ein kleines Anfängerproblem und hoffe mirkann jemand raushelfen!
Nehmen wir mal an, ich hab eine Klasse Termine. Dort kann ich immer wieder neue Objekte erzeugen, welche Termine sind. Nun will ich aber wieder bestimmte Termine mit einer Methode löschen.Falls es keine Methode gibt, um die Termine direkt zu löschen, würde esmir auch sehr helfen, die Attributwerte zu löschen. Dazu hab ich zwar im Intenet gesucht,aber nichts passendes
gefunden. Was noch wichtig ist, ist, dass ich keine Zeiger, Referenzen oder Objekte auf dem Heap verwenden darf, da ich einen Kurs mache und bei diesen Themen noch nicht bin. Für eure Hilfe danke ich euch vielmals.
MfG
pat112
-
pat112 schrieb:
Was noch wichtig ist, ist, dass ich keine Zeiger, Referenzen oder Objekte auf dem Heap verwenden darf,
Wie kannst du denn dann immer wieder neue Objekte erzeugen?
-
Am besten, ich stell mal mein Programm hier rein, das gut funktioniert, ich brauch aber noch einen weiteren Menüpunkt, bei welchem ich Termine löschen kann. Ein neues Objekt erzeuge ich ja bei jedem Aufruf des Menüpunktes "Neuen Termin festlegen".
#include <iostream> #include <string> using namespace std; class Termin { private: int Stunde, Minute, Tag, Monat, Jahr; public: Termin(void){}; int lese_Stunde(){return Stunde;} int lese_Minute(){return Minute;} void setze_Uhrzeit(int s, int t) { Stunde =s; Minute = t;} int lese_Tag() {return Tag;} int lese_Monat(){return Monat;} int lese_Jahr() {return Jahr;} void setze_Datum(int s, int t, int u) {Tag = s; Monat = t; Jahr = u;} }; int main() { int i=0, Alternative=0,Nstunde,Nminute,Ntag,Nmonat,Njahr,t,s,v,a; Termin Nr[20]; do { cout << "1=neuen Termin erstellen\n"; cout << "2=Termin anzeigen\n"; cout << "3=alle Termine anzeigen\n"; cout << "0=Programm enden\n\n"; cout << "Ihre Wahl: "; cin >> Alternative; switch(Alternative) { case 1: cout << "\n\nStunde: "; cin >> Nstunde; cout << "Minute: "; cin >> Nminute; cout << "Tag: "; cin >> Ntag; cout << "Monat: "; cin >> Nmonat; cout << "Jahr: "; cin >> Njahr; Nr[i].setze_Uhrzeit(Nstunde, Nminute); Nr[i].setze_Datum(Ntag, Nmonat, Njahr); t=i; i++; system("pause"); break; case 2: cout << "\nWelcher Termin soll angezeigt werden? "; cin >> s; i=s-1; cout << "\nUhrzeit: " << Nr[i].lese_Stunde() << " : " << Nr[i].lese_Minute(); cout << "\nDatum: " << Nr[i].lese_Tag() << " . " << Nr[i].lese_Monat() << " . " << Nr[i].lese_Jahr() << "\n"; system("pause"); break; case 3: for (i=0;i<=t;i++) { cout << "\n\nTermin " << i+1 << ": \n"; cout << "Uhrzeit: " << Nr[i].lese_Stunde() << " : " << Nr[i].lese_Minute(); cout << "\nDatum: " << Nr[i].lese_Tag() << " . " << Nr[i].lese_Monat() << " . " << Nr[i].lese_Jahr() << "\n"; } system("pause"); break; }}while(Alternative); }MfG
pat112
-
Du kannst also nicht "immer neue" Objekte erzeugen, sondern maximal 20

Mir fallen zwei Möglichkeiten ein, wie du Termine löschen könntest: Du könntest Termine als "leer" markieren, und damit bei der Ausgabe überspringen. Dann müsstest du allerdings beim Erstellen eines neuen Termins erst prüfen, ob irgendwo noch ein leerer Eintrag ist, der wiederverwendet werden kann.
Die bessere Lösung ist vermutlich die, alle Einträge hinter dem zu löschenden Termin um eine Position nach vorn zu kopieren. Dabei wird jeder Termin durch seinen Nachfolger ersetzt. Der letzte ist dann doppelt, aber das kannst du einfach lösen, indem du deinen Zähler wieder um eins verringerst.
Deine Zähler t und i sind übrigens noch etwas konfus. Du solltest klar regeln, welche Variable den nächsten Index trägt, und welche als Laufvariable für Schleifen benutzt wird.
-
Ok, vielen dank zunächst, dass hört sich schon sehr gut an. Kannst du mir vielleicht noch die nötigen Befehle dafür noch schreiben? Vielen Dank..
MfG
pat112
-
pat112 schrieb:
Kannst du mir vielleicht noch die nötigen Befehle dafür noch schreiben?
Für die zweite Lösung brauchst du nichts, was du nicht schon benutzt hättest. Eine for-Schleife sollte reichen.