Danke für deine ausführliche Antwort und den Code zu Definition der Elementfunktionen ausserhalb der Klassendeklaration Ynnus. Ebenfalls vielen danke für deine Erklärung der ganzen Pointergeschichte, die um einiges einfacher zu verstehen ist, als die im Buch, mit dem ich arbeite. Aber:
Zitat von Ynnus
Zur 2ten Frage:
Während du also mit pointer = &a; die Adresse des pointers auf a richtest, wird mit *pointer = (&)a; der Inahalt des Pointers, das, worauf er zeigt, geändert.
...
Genau das ist der springende Punkt, der mich bei dem Codebeispiel stutzig macht.
Wenn ich folgenden Code schreibe, beabsichte ich ja demzufolge, itsAge den Wert von age zu übergeben.
Beim Konstruktor will ich ja genau das selbe: Ich will dem Pointer itsAge den Wert (die Integerzahl 5) zuweisen.
Aber wieso wird bei hierbei auf * verzichtet, obwohl ja eigentlich der Wert/Inhalt angesprochen werden soll?
Da age ein int ist und es in diesem Fall unsinnig ist den Pointer itsAge auf ein int zu setzten, müssen wir itsAge vorher dereferenzieren, d.h. zu einem int machen. Dann stimmt das ganze wieder. int = int.new int(5) liefer aber kein int zurück sondern einen Pointer auf ein int. Daher müssen wir itsAge nicht dereferenzieren, weil wir ja den Pointer selbst setzen wollen. Es wäre übrigens unsinnig in dem Stadium itsAge zu dereferenzieren, weil der Pointer noch uninitialisiert ist. Das heißt er zeigt auf einen zufälligen Ort irgendwie im speicher. Davon lesen oder gar schreiben kann zu erheblichen Fehlern führen.
Da age ein int ist und es in diesem Fall unsinnig ist den Pointer itsAge auf ein int zu setzten, müssen wir itsAge vorher dereferenzieren, d.h. zu einem int machen. Dann stimmt das ganze wieder. int = int.[CODE]
Cat:at()
new int(5) liefer aber kein int zurück sondern einen Pointer auf ein int. Daher müssen wir itsAge nicht dereferenzieren, weil wir ja den Pointer selbst setzen wollen.
...
Ah, genau, klingt und ist einleuchtend ! Und auf einmal erscheint mir das ganze nun endlich plausibel und ich hab` die ganze Pointergeschichte einigermassen begriffen! Mann, das hat aber auch lange gedauert, bis ich das endlich begriffen habe. Ich sitze nämlich schon ne ganze Weile vor dem Code und frage mich "wieso?!". Zwar wird im Buch vieles (sehr vieles) beschrieben, aber die Frage wurde mir erst jetzt beantwortet. Der Einsatz, Zweck und die Handhabung von Pointern (in dieser Grössenordnung) sind mir nun aber schlussendlich eigentlich soweit klar. Danke an euch beide.