C++-Was bedeutet dieses "->"



  • Hey Leute,
    vielleicht ist es eine etwas blöde Frage, aber was bedeuten diese "->" wie bei zum Beispiel:
    http://home.arcor.de/cppjunky/tutorials/md2/tutor_md2p2.htm

    for (int nFrame = 0; nFrame < m_pHeader->numFrames; nFrame++)
            {
                delete[] m_pFrameData[nFrame].pVertices;
            }
    

    Das "m_pHeader->numFrames", was bedeutet das zum Geier? Ich versteh es einfach nicht und gibt es dazu ein Tutorial? Mir reicht das Stichwort zu diesem Titel, ansonsten danke ich allen die mich Ernst nehmen.



  • Gebangt schrieb:

    Mir reicht das Stichwort zu diesem Titel, ansonsten danke ich allen die mich Ernst nehmen.

    Stichwort: Pointer

    etwas genauer: Mit dem .-Operator greifst du bei Objekten auf deren Member bzw. Methoden zu. Mit dem -> Operator greifst du bei Pointern auf die Member/Methoden des Objektes zu, auf das der Pointer zeigt.

    m_pHeader ist also ein Pointer auf irgendein Objekt, und dieses Objekt hat ein Member numFrames, auf das zugegriffen wird. Ist das gleiche wie [c](*m_pHeader).numFrames

    Du solltest allerdings wirklich noch ein paar Stunden mit dem C++-Buch/Tutorial deiner Wahl verbringen, denn sowas gehört zu den absoluten Basics von C++



  • m_pHeader
    

    ist hier ein Pointer. Und du weißt ja das man auf Member einer Klasse/Struct über die Punktnotation zugreifen kann, meinetwegen so

    meinobjekt.ein_attribut;
    

    wenn dein Objekt jedoch ein Zeiger auf die Klasse ist dann wird aus dem "." ein
    "->"
    jedoch kann man das "->" so hier umschreiben

    (*meinobjekt).ein_attribut;
    

    EDIT: --.-- Too Late



  • Achsooo, jetzt hab ich's gerallt. Hab mich schon gefragt warum man die Instanz nicht einfach übers Objekt aufruft, bzw.:

    m_pHeader.numFrames
    

    Aber das geht ja schlecht weil es ein Zeiger ist, alles klar, danke schön.



  • EDIT:
    Einfach: Wenn man ein Attribut von einer Klasse haben will, diese Klasse aber "gepointet" wird, ruft man es anstatt mit "." einfach mit "->" auf, alles klar.
    Dankö!



  • Gebangt schrieb:

    EDIT:
    Einfach: Wenn man ein Attribut von einer Klasse haben will, diese Klasse aber "gepointet" wird, ruft man es anstatt mit "." einfach mit "->" auf, alles klar.
    Dankö!

    Grundsätzlich stimmt das. Jedoch gibt es einen Unterschied zwischen . und ->.
    Den -> kannst du überladen, den . Operator nicht.
    Das wirst du dann antreffen, wenn du dich mit smart-Pointern beschäftigst.


Anmelden zum Antworten