Objekte in Datei schreiben und lesen!
-
Und wie soll man den namen von ner Person ändern? Ein Iterator wäre nicht schlecht, und rein oop-technisch würde ich aus Person nen struct machen und ein template einfach_verkettete_liste einführen...
-
@virtuell Realisticer
Kannst du bitte nochmal schreiben wie die MAIN Funktion von Deinem geposteten Code aussieht ?
Vielen Dank.
-
otze schrieb:
[...]
richtig wärs wohl so:
template<class charT,class traits> friend std::basic_ostream<charT,traits> &operator<<(std::basic_ostream<charT,traits> &out,Personen const &p)
sorry, king, darauf musste ich noch hinweisen :), kannst dich ja bald mal revanchieren
ja, natürlich! Wie konnte ich nur!
-
ness schrieb:
Und wie soll man den namen von ner Person ändern? Ein Iterator wäre nicht schlecht, und rein oop-technisch würde ich aus Person nen struct machen und ein template einfach_verkettete_liste einführen...
Naja, i.d.R. aendert sich der Name einer Person nicht im laufe seines Lebens. Ein
Iterator koennte man in der Tat noch machen. Und ob du ein struct oder ein class
nimmst, ist "oop-technisch" egal. Bis auf die Standardsichtbarkeit verhalten sich
beide Konstrukte gleich. Der Einfachheit halber wuerde ich persoenlich ein
std::list fuer sowas nehmen, aber wenn es nur zur Uebung ist.@virtuell Realisticer
Kannst du bitte nochmal schreiben wie die MAIN Funktion von Deinem geposteten Code aussieht ?
Vielen Dank.
Du solltest etwas mehr eigeninitiative zeigen. Auf die main-Funktion sollte
man jetzt sehr leicht kommen. Sie koennte z. B. so aussehen:int main() { Person person; Person tmp; char end; while(end != 'n') { cout<<"Personenname: "; cin >> tmp; person.setDaten(tmp); cout<<"Noch mehr Personen? "; cin >> end; } return 0; }
[edit]
Hmmm...offentsichtlich bin ich zu bloed geworden, um eine Liste zu
implementieren :(. Die Liste funktioniert nicht so, wie sie soll, aber ich
kann mich im Moment nicht darum kuemmern, muss ja auch was arbeiten ;).Heut Abend, wenn ich die Zeit bekomme, werde ich mir das nochmal anschauen.
Soll trotzdem niemanden daran hindern, hier was zu posten.
[/edit]mfg
v R
-
Morgen,
also ich konnte das nicht so auf mir sitzen lassen. Hier der Code, der bei mir
funktioniert (MinGW Developer Studio mit gcc):class Person{ private: string name; Person *next; public: Person(const std::string& n) : name(n), next(0) //0 makiert das ende {} Person() : name(""), next(0) {} ~Person(); //ich versteh nicht ganz, warum hier Person**? //void setDaten(Person **liste_pointer); //so ganz spontan haette ich das so gemacht: void setDaten(const Person& p); void getDaten(); friend std::ostream &operator<<(std::ostream &out,Person const &p) { out << p.name << '\n'; return out; } friend std::istream &operator>>(std::istream &in,Person &p) { std::getline(in,p.name); return in; } }; Person::~Person() { delete next; } void Person::setDaten(const Person& p){ Person* tmp = this; //this ist kopf der liste Person* newPerson = new Person(p.name); while(tmp->next) tmp = tmp->next; //wir sind am ende angelangt, newPerson ist das neue //letzte element tmp->next = newPerson; tmp->next->next = 0; //damit o. schleife auch funktioniert } //die funktionalitaet sollte jetzt klar sein void Person::getDaten(){ Person* tmp = next; while(tmp) { cout<<tmp->name<<endl; tmp = tmp->next; } } int main() { Person person; Person tmp; char End = 'j'; while(End != 'n') { cout<<"Namen eingeben: "; cin >> tmp; person.setDaten(tmp); cout<<"Noch eine Person anlegen? "; cin >> End; } person.getDaten(); return 0; }
mfg
v R