christoph.redl@utanet.at
-
Hallo!
- Angenommen ich schreibe Folgendes:
Klasse1 objekt;
Kann man dann sagen, dass "objekt" eine Referenz auf eine Instanz der Klasse "Klasse1" ist?
Nach dem was man so liest (also dass man z.B. Referenzen auch für Basistypen einsetzen kann) schaut es ja nicht so aus, aber ich bin mir da trotzdem noch unsicher, wenn ich mir andere Programmiersprachen ansehe:In Java oder VB z.B. sind alle Dinge (um den Begriff neutral zu halten) mit denen man auf Objekte zugreifen kann Referenzen:
Java: JavaClass javaObject = new JavaClass();
VB: Dim vbObject as new VBClass()In diesem Fall wären javaObject und vbObject Referenzen auf Klasseninstanzen, also Referenzen auf Objekte.
Ist das nun in C++ auch so, dass alles das auf Objekte "zeigt" eine Referenz ist? Wenn nein: Was ist es dann, also wie würde man in Klasse1 object; das object nennen?
Wenn es Referenzen sind, dann wäre ja in folgendem Beispiel:
Klasse1* object = new Klasse1();
"object" eigentlich ein Pointer auf eine Referenz, oder?
-
Den technischen Unterschied zwischen Pointern und Referenzen verstehe ich ja, aber was genau ist der Unterschied für den Programmierer? Abgesehen von der Syntax kann man doch mit beiden Dingen das gleiche machen, oder?
-
Warum kann man in C++ nicht schreiben: Klasse1 object(); ?
Da meckert er bei den Klammern. Aber was ist wenn ich nicht den Standard-Konstruktor verwenden will? Dann muss ich ihm doch Parameter in den Klammer übergeben? Warum geht es nur wenn ich schreibe: Klasse1* object = new Klasse1(); ?
Danke!
-
Falscher Titel, falsches Forum...
-
Ups, beim Titel hab ich mich wohl kräftig vertan.
Bin es von anderen Foren so gewöhnt dass das 2. Feld immer die Mail-Adresse ist.
-
Christoph Redl schrieb:
- Angenommen ich schreibe Folgendes:
Klasse1 objekt;
Kann man dann sagen, dass "objekt" eine Referenz auf eine Instanz der Klasse "Klasse1" ist?
[...]
Ist das nun in C++ auch so, dass alles das auf Objekte "zeigt" eine Referenz ist? Wenn nein: Was ist es dann, also wie würde man in Klasse1 object; das object nennen?'objekt' ist hier die Instanz von Klasse1.
Beispiel:Klasse1 obj2 = objekt; // Es wird eine Kopie erstellt, keine Referenz auf 'objekt' Klasse1& robj = objekt; // Hier hast du jetzt eine Referenz, wie's in Java wäre.
- Den technischen Unterschied zwischen Pointern und Referenzen verstehe ich ja, aber was genau ist der Unterschied für den Programmierer? Abgesehen von der Syntax kann man doch mit beiden Dingen das gleiche machen, oder?
Referenzen 'zeigen' immer auf das selbe Objekt, Zeiger kann man umbiegen:
Klasse& robj = bla; &robj = blub; // geht nicht Klasse* pobj = &bla; pobj = &blub; // funktioniert
Ausserdem braucht man Referenzen nicht dereferenzieren.
Eigentlich gibt es keinen technischen Unterschied, sondern nur diese beiden Unterschiede für den Programmierer.- Warum kann man in C++ nicht schreiben: Klasse1 object(); ?
Da meckert er bei den Klammern. Aber was ist wenn ich nicht den Standard-Konstruktor verwenden will? Dann muss ich ihm doch Parameter in den Klammer übergeben? Warum geht es nur wenn ich schreibe: Klasse1* object = new Klasse1(); ?
Ist ein dummer Syntax-Konflikt.
int x();
ist eine Funktionsdeklaration für eine Funktion, die keine Parameter nimmt und int zurückgibt.