this vs. punktoperator
-
hello :xmas2:
Klasse person; person->id(); // id ausgeben // oder person.id();nur versteh ich ned den unterschied zw den beiden

wie wurde "id" in der klasse definiert,dass da ein -> später stehen muss und wie wenn da ein punktoperator?
liebe grüse!
-
in deinem Code ist die erste Zeile mit der Anwendung des -> operators höchstwahrscheinlich falsch, es sei denn die Klasse "Klasse" hat ihn überladen.
Normaler gebrauch der Operatoren sieht so aus:class Person; Person person; //ein Objekt vom Typ Person Person* pperson; //ein Zeiger auf ein solcehs Objekt person.id(); //führt für das Objekt die methode id aus pperson->id(); //folgt dem Zeiger und führe für das objekt, auf das er zeigt die methode id ausFazit: der -> operator ist nur bei Zeigern anwendbar (und bei Klassen, die wie Zeiger funktionieren, z.B. auto_ptr<>)
-
Nur wird bei deinem Aufruf von id() bei deinem Zeiger ein Segfault ausgelöst, da du keinen Speicher für das Objekt reserviert hast, und der Zeiger ins Nirvana zeigt.
Ein
pperson = new Person;schafft da Abhilfe^^
(Und danach nicht das "delete pperson" vergessen ;))
-
danke, aber was bringt ein Zeiger?
man kann ja normal auch mit punktoperator.
verstehe nur nicht den sinn
-
Zeigervariablen sind in ihrer Anzahl dynamisch, sie werden zur Laufzeit erstellt, oder auch nicht. Punktvariablen werden in das Programm mehr oder weniger eingelinkt und sind dann auch von der Anzahl her nicht mehr veränderbar.
Du kannst also entweder sagen
int a[3]und hast immer 3 ints
oder du sagst
int *a; a = new int[3];und kannst später sagen
delete a; a = new int[8];Wenn du also nicht weißt, wieviele Elemente du von einem Datentyp (ob nun int, oder irgendeine Klasse) brauchst, dann machst du's über Zeiger.
-
Dynamisch Speicher auf dem Heap allokieren geht nur mittels Zeigern.
Wenn du dagegen statisch die Menge voraussehen kannst, bist du mit normaler Deklaration besser.
Desweiteren braucht man Zeiger, um auf andere Objekte verweisen zu können (z. B. Knoten einer Linked List).