zeiger auf klassen



  • Hi,

    ich hab mal eine Verständnisfrage.

    Ich hab gelernt, das man einen Zeiger auf eine klasse folgendermaßen anlegt:
    (klassenname ist auto)

    auto test;
    auto *p_test;
    p_test=&test;
    

    wenn ich aber nur

    auto *p_test;
    

    schreibe, funktioniert das auch.
    ist das nur ein zufallsprodukt das es funktioniert oder reicht es wenn ich nur den zeiger anlege?



  • Inwiefern funktioniert das auch???



  • Wenn du nur auto* test; schreibst, hast du einen Zeiger - aber der zeigt zunächst ins Nirvana (d.h. auf irgendeine willkürliche Adresse). Wenn du versuchst, irgendwas mit dem Objekt dahinter zu machen, endet das garantiert in einer Katastrophe (eine "Access Violation" ist da noch das beste, was dir passieren kann).

    Um mit dem Zeiger sinnvoll arbeiten zu können, mußt du ihm die Adresse eines gültigen Objekts übergeben, also entweder die Adresse einer vorher angelegten Variablen ( test=&data; ) oder einen auf dem Heap reservierten Speicherblock ( test=new auto; - hier bist du für das Aufräumen per delete test; verantwortlich).



  • Das funktioniert soweit das keine zeigerfehler kommt und ich mit den mothoden und atributen in der klasse arbeiten kann



  • BTW:

    schülerfrage schrieb:

    ...
    (klassenname ist auto)
    ...

    Wie Dir das Syntaxhighlighting anzeigt, ist "auto" ein (gelinde gesagt) "ungünstiger" Klassenname ... weil es ein gleichlautendes reserviertes Wort in C++ gibt.

    Inhaltlich hat CStoll schon alles gesagt.
    Kurz gesagt: "Wenn Du nach Hamburg fahren willst, reicht es nicht, einen Zettel zu haben, auf dem ein Autokennzeichen stehen kann - wenn Du nur einen Zettel haben möchtest, schon" 😉

    schülerfrage schrieb:

    Das funktioniert soweit das keine zeigerfehler kommt und ich mit den mothoden und atributen in der klasse arbeiten kann

    Glaube ich nicht. :p
    Es wäre der erste Rechner, der hellsehen kann... (Bitte keine Kommentare bzgl. Astrologieabzocke im TV 😉 ).
    Zeig uns mal mehr Code.

    Gruß,

    Simon2.



  • Hi, quelltext hab ich nicht dazu das hab ich mir mal eben ausgedacht (deswegen der fehler mit auto).

    Ich hab festgestellt das es sporadisch funktioniert. manchmal macht der zeigerfehler (adressfehler) und manchmal nicht.

    hmm... der zeiger zeigt ja ins nirvana, wenn im nirvana nicht besonderers steht kann ihn das ja auch nicht stören. er meckert denkich nur wenn er auf ne andresse zegt wo er nicht hinzeigen darf.



  • schülerfrage schrieb:

    Ich hab festgestellt das es sporadisch funktioniert. manchmal macht der zeigerfehler (adressfehler) und manchmal nicht.

    hmm... der zeiger zeigt ja ins nirvana, wenn im nirvana nicht besonderers steht kann ihn das ja auch nicht stören. er meckert denkich nur wenn er auf ne andresse zegt wo er nicht hinzeigen darf.

    Und genau das ist das Problem bei diesem Code - du kannst dich nicht darauf verlassen, was passiert. Mit Glück macht dich dein Betriebssystem darauf aufmerksam, daß du Mist gebaut hast (Access Violation), aber im Regelfall wird das Programm einfach irgendwelche Speicherzellen überschreiben, die dir nicht gehören. (was das für Folgen haben kann, ist nicht abzusehen)



  • schülerfrage schrieb:

    Ich hab gelernt, das man einen Zeiger auf eine klasse folgendermaßen anlegt:

    das ist genau genommen schon falsch. du kannst einen zeiger auf ein Objekt einer Klasse zeigen lassen, nicht auf die Klasse selber.


Anmelden zum Antworten