Eingabe eines Strings bei dynamischen Objekt



  • realshadow schrieb:

    Wenn es für alle Felder des Arrays ein new PRODUCT gibt, ist es dann nicht möglich?

    Was ist dann nicht möglich?



  • Wenn es für alle Felder des Arrays ein new PRODUCT gibt, ist es dann möglich?

    Also ob es dann funktioniert?

    Also ich brauche maximal 30 dynamisch erzeugte Instanzen, muss auf jede Zugreifen und doppelt verkettete Listen kann ich noch nicht 😃



  • Wenn du max. 30 dynamische Objekte willst, machst du es so:

    PRODUKT *P = new PRODUKT[30];
    //...
    delete[] p;
    

    wenn du sowas brauchst, ist aber Nathans Lösung die richtige.



  • out schrieb:

    Wenn du max. 30 dynamische Objekte willst, machst du es so:

    PRODUKT *P = new PRODUKT[30];
    //...
    delete[] p;
    

    wenn du sowas brauchst, ist aber Nathans Lösung die richtige.

    Danke, wieso muss ich dann aber mit P[x].set_name() zugreifen und nicht mehr P[x]->set_name()? Bei Zeigern muss man doch per -> zugreifen?
    Das ist auch bei

    Produkt *P[30];
    P[1]=new PRODUKT;
    P[1]->set_name();
    

    Also ich habs zumindest so gelernt, bei Zeigern auf Objekte, immer mit -> auf Methoden zugreifen



  • "->" musst du nehmen, wenn sich links davon ein Zeiger auf ein Objekt befindet. "." nimmst du, wenn sich links davon ein Objekt befindet. "[]" bewirkt eine Dereferenzierung. Wenn du nun den Zeiger dereferenzierst, landest du bei einem PRODUKT-Objekt, also steht links ein Objekt, also muss der "." her.

    Ja, anders sieht es aus, wenn du jedes Objekt einzlen dynamisch erzeugst. Dann hast du 30 Zeiger und 30 Objekte. Wenn du hier dann den "[]" anwendest, landest du nicht sofort bei einem Objekt, sondern erst bei einem Zeiger, darum brauchst du "->".

    Also in dem einen Fall hast du 30 Zeiger und 30 Objekte, in dem anderen Fal hast du 1 Zeiger und 30 Objeke.



  • out schrieb:

    "->" musst du nehmen, wenn sich links davon ein Zeiger auf ein Objekt befindet. "." nimmst du, wenn sich links davon ein Objekt befindet. "[]" bewirkt eine Dereferenzierung. Wenn du nun den Zeiger dereferenzierst, landest du bei einem PRODUKT-Objekt, also steht links ein Objekt, also muss der "." her.

    Ja, anders sieht es aus, wenn du jedes Objekt einzlen dynamisch erzeugst. Dann hast du 30 Zeiger und 30 Objekte. Wenn du hier dann den "[]" anwendest, landest du nicht sofort bei einem Objekt, sondern erst bei einem Zeiger, darum brauchst du "->".

    Also in dem einen Fall hast du 30 Zeiger und 30 Objekte, in dem anderen Fal hast du 1 Zeiger und 30 Objeke.

    Alles klar - vielen Dank!

    ist mit PRODUKT *P = new PRODUKT[30]; die Instanzierung dann noch dynamisch?



  • Vielleicht sollte man auch noch folgendes klarstellen:

    new PRODUKT[30]
    

    Bedeutet: Array von 30 PRODUKT-Objekten im dynamischen Speicher.

    PRODUKT *P[30];
    

    Bedeutet: Array von 30 PRODUKT-Zeigern im automatischen Speicher.



  • OK, danke!


  • Mod

    Warum wird hier new fuer Felder empfohlen? Denkt nicht mal einer an die Kinder vector?



  • SeppJ schrieb:

    Warum wird hier new fuer Felder empfohlen? Denkt nicht mal einer an die Kinder vector?

    Ihm wurde gesagt, dass Nathans Lösung der richtige Weg ist. Darauf ist er aber nicht eingegangen. Ich denke, es handelt sich hier um "mach es so wie dein Lehrer es macht".


Anmelden zum Antworten