Objekte dynamisch anlegen ?



  • Hallo zusammen,
    ich lerne gerade C++ und möchte ein kleines Adressbuch schreiben. Hab eine Adressen Klasse erstellt und kann statisch schon Adressen anlegen. Wie kann ich neue Adressen bzw. Objekte dynamisch anlegen, möchte das ganze mit "new" realisieren. Bei "new" brauch ich ja einen Pointer, allerdings versteh ich nicht ganz wie ich das realisieren soll, denn jedes Objekt brauch doch eigentlich sein individuellen Namen, also wie soll das mit einem Pointer gehen? Möchte ja auch wieder auf die Daten zugreifen.

    Statisch sah es bei mir immer so aus:

    int main(void){
    Adresse neueadresse; // 1 Benuzter anlegen
    
    neueadresse.benutzerEingeben(void);
    neueadresse.benutzerAusgeben(void);
    
    }
    

    Danke für Eure Hilfe.



  • Adresse *neueadresse = new Adresse;
    neueadresse->benutzerEingeben(void);
    


  • Ja aber wenn ich z.B. 5 Leute eintrage, wie greif ich dann darauf zu ? Der pointer neueadresse zeigt ja auf das letzte eingegebene Element ?

    Habt Rücksicht ich bin wirklich noch total Noob.



  • Adresse *neueadresse = new Adresse[5];
    (*(neueadresse + 4 /* dein Index */)).benutzerEingeben(void);
    


  • Adresse *neueadresse = new Adresse[5];    // Legt ein Array von 5 Adresse-Objekten an
    neueadresse[2]->benutzerEingeben(void);        // greift auf dritte Adresse zu
    


  • STL stellt einige Templates bereit, die für so etwas geeignet sind z. B. Listen, Reihen, usw.



  • Vertexwahn: Mach mal langsam, er ist noch Anfänger. Er will wohl kaum mit Maps anfangen.



  • Wieso nicht einfach std::vector? Das entbindet vom handlen mit new und erlaubt große Flexibilität.

    std::vector<Adresse> adressen;
    
    Adresse adresse;
    adresse.benutzerEingeben();
    
    adressen.push_back(adressen); // in den vector einhängen
    

    nicht vergessen <vector> zu includen.

    MfG Jester



  • Apropos nicht vergessen: Wenn du new benutzt, musst du auch delete verwenden.

    delete Adresse;    // oder bei einem Array:
    delete [] Adresse;
    

    Zum Vektor: Ich finde Vektoren gut und weiß, dass du auch ein Fan von STL-Containern bist, aber IMHO sollte man mit Arrays anfangen (und natürlich nachher von weggehen 😉 ).



  • ich finde man sollte mit dem Anfangen was einfach ist und gut funktioniert. Den Rest kann man später lernen. Es gibt inzwischen sogar schon das ein oder andere Einsteigerbuch, daß das genauso macht. Accelerated C++ zum Beispiel. Dort benutzt man von Anfang an die STL und lernt diese konsequent einzusetzen.
    Und das ist nunmal die Lösung, die man später zumeist verwenden wird. Warum dann erst ne andere lernen und nicht gleich die für den Normalfall und alles weitere wenn man's mal braucht.

    MfG Jester



  • Na gut, überredet. Peng, machs mit nem STL-Container. Oder benutze gleich Smart Pointer, um das ganze etwas anspruchsvoller und praxisferner zu machen 😃



  • also ich bin auch gerade am lernen von c++ und denke, dass CME recht hat ... man sollte schon die grundlagen kennen, damit man auch mit der stl zurecht kommt ... doch bin ich nur ein noob und hab die welt noch nich ganz gesehn 🙂

    mfg



  • Kannst Du Fahrrad fahren? So richtig mit Gangschaltung und Bremse? Vermutlich schon. Kannst Du soeins bauen? - Ich auch nicht... ich benutz es trotzdem.



  • Jester schrieb:

    Kannst Du Fahrrad fahren? So richtig mit Gangschaltung und Bremse? Vermutlich schon. Kannst Du soeins bauen? - Ich auch nicht... ich benutz es trotzdem.

    Auch wenn das ein netter Vergleich ist, ich finde schon das es wichtig ist zu verstehen wie Container funktionieren. Dabei lernt man auch gleich noch mit Pointer umzugehen.

    Von daher wäre mein Tip: Versuche erstmal eine doppelt verkette Liste zu programmieren 🙂



  • Jester schrieb:

    Kannst Du Fahrrad fahren? So richtig mit Gangschaltung und Bremse? Vermutlich schon. Kannst Du soeins bauen? - Ich auch nicht... ich benutz es trotzdem.

    Der Vergleich hinkt doch etwas. Niemand hat gesagt, man solle ein Fahrrad bauen (oder std::vector nachprogrammieren). Du solltest aber schon wissen wie man die Gangschaltung oder die Bremsen anwendet, oder du wirst nie richtig Fahrrad fahren.



  • Und wie eine Gangschaltung am besten funktioniert, lernt man bekanntlichermaßen am besten auf einem Roller. 👍



  • Kannst du mir mal den kausalen Zusammenhang erklären. Steh gerade aufm Schlauch. Die C++ Sprachmittel sind ja unabhängig von STL Klassen Implementationen.



  • Zu verstehen wie ein vector funktioniert geht hier aber am Thema vorbei. Es ist ganz konkret die Frage, wie man eine Objektmenge verwalten kann. Und da ist vector einfach und simpel. Natürlich ist es toll, wenn man das versteht, aber in erster Linie geht es hier doch darum ein Problem zu lösen.

    Um bei dem Beispiel mit dem Fahrrad zu bleiben. Du willst von A nach B, ich geb Dir ein Fahrrad und ein set Teile, aus denen man ein Fahrrad bauen will. Geht es um's Verständnis des Systems (war hier aber nicht gefragt), dann würd man natürlich das Fahrrad selber bauen. Geht es aber nur darum ne Aufgabe erledigt zu kriegen, also von A nach B zu kommen (das war hier gefragt), dann würde wohl jeder normale Mensch das Fahrrad nehmen.



  • Jester schrieb:

    Zu verstehen wie ein vector funktioniert geht hier aber am Thema vorbei.

    Darum ging's mir ja auch nicht, sondern darum, C++ zu verstehen. Und sich dabei sofort auf die STL zu stürzen, ist imo falsch. Was bringt es einem 'ne Funktion binaer_string -> int zu schreiben, wenn ich dann pow(2, ...) benutze (nur so als Beispiel, weil ich sowas heute erst wieder gesehen hab)?

    Jester schrieb:

    dann würde wohl jeder normale Mensch das Fahrrad nehmen

    Was einem aber trotzdem nix nützt, wenn man nicht weiss wie 'ne Gangschaltung funktioniert oder wozu die Pedale da sind.



  • groovemaster schrieb:

    Was einem aber trotzdem nix nützt, wenn man nicht weiss wie 'ne Gangschaltung funktioniert oder wozu die Pedale da sind.

    Falsche Ebene



  • nur mal angemerkt: durch die anwendung der stl container lernt man fast automatisch, wie ein array funktioniert, wie man pointer benutzt, usw. Stichwort iteratoren.


Anmelden zum Antworten