myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

C++ Zeiger und Referenzen

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 20.10.12, 22:00   #1
sidious80
Sith-Lord
 
Benutzerbild von sidious80
 
Registriert seit: Mar 2011
Beiträge: 58
Bedankt: 8
sidious80 ist noch neu hier! | 0 Respekt Punkte
Standard C++ Zeiger und Referenzen

Nabend zusammen,

ich brauche unbedingt mal Hilfe in Sachen Programmierung. Ich habe mit Java angefangen zu programmieren und habe vor einigen Monaten mit C/C++ angefangen. Nach langen hin und her habe ich auch verstanden wie die Zeiger und Referenzen funktionieren.

Mein Problem ist jedoch, wenn mir nicht ausdrücklich gesagt wird ich soll diese jetzt hier verwenden, tue ich es auch nicht, weil ich es nicht einsehe und vor allem von Java anders gewöhnt bin.

Es hat einfach noch nicht klick gemacht. Ich hoffe jemand hat ein paar gute Erklärungen oder Tipps wie ich diese Problematik beheben kann.

Gruß
sidious80
sidious80 ist offline   Mit Zitat antworten
Ungelesen 21.10.12, 01:07   #2
Madddin_89
Newbie
 
Registriert seit: Jun 2010
Beiträge: 56
Bedankt: 10
Madddin_89 ist noch neu hier! | 0 Respekt Punkte
Standard

Bin jetzt zwar kein Java Experte,
aber ich glaube zu wissen, es macht das Selbe:

Wenn du ein Objekt von einem Datentyp erstellst, existiert es irgendwo in deinem Speicher. Übergibst du beim Funktionsaufruf das Objekt als Parameter wird bei c/c++
der Kopier-Konstruktor aufgerufen und dein Objekt liegt nun zweimal vor.
Benutzt du nun in der aufgerufenen Funktion das übergebene Objekt wird nur die Kopie davon geändert.

Übergibst du allerdings den Zeiger bzw. die Referenz, arbeitet deine Unterfunktion mit dem "Einen" Objekt weiter.

Falls was fehlerhaft beschrieben wurde, bitte ich um Verbesserung
Madddin_89 ist offline   Mit Zitat antworten
Ungelesen 21.10.12, 02:20   #3
Quabla
Mitglied
 
Registriert seit: Oct 2010
Beiträge: 296
Bedankt: 151
Quabla ist noch neu hier! | 0 Respekt Punkte
Standard

völlig richtig, was der vorposter sagt. hier gibts aber auch tücken. wenn du nicht explizit einen kopierkonstruktor implementierst, wird nur eine flache kopie (shallow copie) von dem übergebenen objekt angelegt,. das ganze ist hier agnz gut erläutert: [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]

aber wenn du nun nach dem unterschied, zwischen pointer oder referenz als übergabeparameter fragst, ich glaub der unterschied besteht da nur in der syntax, sprich wenn du nen pointer übergibst, sprichst du die methoden mir -> an und sonst mit .

mir würde nur einfallen, dass die referenz speicherschonender ist, weil wirklich mit genau dem selben objekt weitergearbeitet wird. wenn du nen pointer übergibst, wird in der funktion ein neuer pointer initialisiert, der auf genau den gleichen speicherbereich zeigt.
Quabla ist offline   Mit Zitat antworten
Ungelesen 21.10.12, 06:52   #4
Your_Conscience
Hinter dir!
 
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
Your_Conscience ist noch neu hier! | 0 Respekt Punkte
Standard

Meine beiden Vorposter haben noch eine sehr wichtige Sache vergessen: den Geschwindigkeitsvorteil.
Bei Integer z.B. wird man da keinen Unterschied merken, arbeitet man aber mit größeren Datenmengen sollte man möglichst mit Referenzen arbeiten.
Your_Conscience ist offline   Mit Zitat antworten
Ungelesen 21.10.12, 17:08   #5
slahn
Erfahrenes Mitglied
 
Benutzerbild von slahn
 
Registriert seit: Oct 2009
Beiträge: 640
Bedankt: 228
slahn ist noch neu hier! | 0 Respekt Punkte
Standard

Eine Referenz ist die weniger mächtige aber sicherere Form eines Pointers. In Teilbereichen kann man einen Pointer mit einer Referenz ersetzen, aber nicht immer. Im OOP könnte man das ganze als Vererbungshierarchie darstellen. Wobei ein Pointer eine Spezialisierung einer Referenz ist (also Pointer erbt von Referenz).

Um dir das als Java-Kenner etwas klarer zu machen, kannst du dir eine Referenz in C++ so vorstellen, wie eine Referenz (Variable auf ein Objekt) in Java, welche aber als final deklariert wurde (eine Referenz in C++ kann nicht mehr auf ein anderes Objekt (Datentyp) Referenziert werden; also wenn du in Java eine Variable mit final verwendest, kannst du in C++ eine Referenz verwenden (meistens)). Jedoch gib es dann noch ein paar zusätzliche unterscheide. Eine Referenz in C++ muss, zum Unterschied zu Java immer auf ein Objekt (Datentyp) referenzieren (kann also nicht null (NULL) sein).

Man sollte aus Sicherheitsgründen immer eine Referenz verwenden. Erst wenn es mit einer Referenz nicht mehr möglich ist (z.B.: dynamische Datenstrukturen, wenn man die Variable für verschiedene Objekte verwenden muss, ...), sollte man zu einem Pointer greifen. Denn immer da wo du einen Pointer verwendest, wird es "gefährlich" (also lieber 5 mal überlegen, ob es nicht doch mit einer Referenz geht; zudem solltest du dir als Ersatz für Pointer, Smartpointer ansehen).
__________________
"[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]" (Klopfers Vater)
slahn ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 Uhr.


Sitemap

().