Zeiger auf Objekten



  • Hallo,

    Schaut euch einmal folgendes an:

    //Instanz auf Klassenname
    Klassenname Objekt;
    //Zeiger auf Instanz von Klassenname
    Klassenname *Objekt2;
    
    Objekt2 = &Objekt
    
    Objekt2->Bla();
    

    Funktioniert es denn auch so:?

    //Funktioniert das auch:
    Klassenname *Objekt2;
    Objekt2->Bla();
    

    Beim ersten Beispiel weise ich ja explezit die Adresse von Objekt an Objekt2.
    Funktioniert es denn auch wenn ich einfach einen Zeiger vom Typ Klassenname deklariere, kann ich dann auch auf die Methoden der Klasse zugreifen?

    Grüße Zeigermann



  • Ja allerdings wird dir dann das Programm um die Ohren fliegen weil der Zeiger nirgends hinzeigt.

    Was du suchst ist new:

    Klassenname *Objekt2 = new Klassenname();
    Objekt2->Bla();
    
    //und wenn du fertig bist nicht vergessen das Objekt zu löschen:
    
    delete Objekt2;
    


  • Alles klar danke!
    Noch eine kleine Frage:

    Ein Zeiger ist ja sozusagen ein Array .. funktioniert folgendes:?

    Klassenname *m_lpPointer;
    m_lpPointer = new Klassenname(10);
    m_lpPointer[1]->bla = 10;
    delete m_lpPointer;
    


  • Zeigermann schrieb:

    Ein Zeiger ist ja sozusagen ein Array ..

    Nein. Ein Array lässt sich implizit in einen Zeiger auf sein erstes Element umwandeln, aber ein Zeiger ist kein Array.

    funktioniert folgendes:?

    Dafür solltest Du in "folgendes" evtl. auch ein Array allokieren 😃 - desweiteren muss die Deallokation über Array-Delete durchgeführt werden.

    Klassenname *m_lpPointer;
    m_lpPointer = new Klassenname[10]; // <- []
    m_lpPointer[1]->bla = 10;
    delete [] m_lpPointer; // <- []
    

    Ja, das funktioniert.



  • m_lpPointer[1].bla = 10; // . statt -> ist richtig
    


  • nein warum ist dochn Zeiger oder?



  • Zeigermann schrieb:

    nein warum ist dochn Zeiger oder?

    Nein. Sofern der Inhalt im Array keine Zeiger sind, bekommst du mit [] ein Objekt.



  • Es bliebe in diesem Fall ein Zeiger, sieht aber unübersichtlicher aus:

    (m_lpPointer + 1)->bla = 10;
    


  • Oah Zeigerarithmethik, wie eklig^^


Log in to reply