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


Anmelden zum Antworten