Diskussion:C++-Programmierung/ Weitere Grundelemente/ Referenzen

Letzter Kommentar: vor 11 Jahren von 87.150.21.248 in Abschnitt Zweites Beispiel

Zweites Beispiel

Bearbeiten

Die neuzuweisung auf a ist bei der Ausgabe nicht ersichtlich. Weil bei der nächsten Ausgabe sowohl a als auch b den Wert 20 haben. Vielleicht kann man den Wert b ändern um es einfacher zu machen --87.150.21.248 21:21, 24. Jan. 2013‎ (CET) (Unterschrift nachgetragen --Prog 17:31, 27. Jan. 2013 (CET))Beantworten

a und b müssen doch den selben Wert haben, weil r den wert von b zugewiesen bekommt und r ja nur ein Referenz auf a ist. --92.196.34.106 21:39, 24. Jan. 2013 (CET)Beantworten
gut danke. Dann hab ich das jetzt auch verstanden, wie das gemeint ist. --87.150.21.248 08:54, 27. Jan. 2013‎ (CET) (Unterschrift nachgetragen --Prog 17:31, 27. Jan. 2013 (CET))Beantworten

Stimmt das?

Bearbeiten

Im Beipiel steht:

CMyClass::CMyClass(CMyClass& rMyClass)

Steht der Referenzoperator & richtig? Muss es nicht vielmehr

CMyClass::CMyClass(CMyClass &rMyClass)

heißen?

Das ist Geschmackssache. Der Compiler akzeptiert beides. --Sliver 17:37, 16. Aug 2005 (UTC)

Der Compiler schon, ich nicht. Als Anfänger habe ich mühe, solche kleinen 'Geschmackssachen' zu verstehen. Ich glaube, das leuchtet ein. Gruss, o.z.

Du kannst

int* a,b,c;

oder

int *a,b,c;

schreiben. Von welchem Typ sind a,b,c jeweils? Oben haben wir 3 Zeiger, Unten ist nur a ein Zeiger, b und c sind normale int-Variablen. Bei Referenzen verhält sich das analog.

Nein, in beiden Fällen ist a ein Zeiger, b und c sind int. Abstände zwischen Token werden vom Compiler ignoriert (im Prinzip bräuchte man sie nur dort, wo sonst andere Token entstünden, z.B. bei "intmain" statt "int main"). Die folgenden Deklarationen sind also alle äquivalent:
int*a,b,c;
int* a, b, c;
int *a, b, c;
int * a , b , c ;
int
*
a
,
b
,
c
;
Allerdings definiert folgendes drei Zeiger:
typedef int *iptr;
iptr a, b, c;
Generell ist es in C++ eine gute Idee, nur eine Variable auf einmal zu defnieren, dann gibt es keine Missverständnisse:
int* a;
int b;
int c;
Die Deklarationssyntax ist der schlechteste Teil von C++ (und C). --85.179.84.133 16:53, 17. Mai 2007 (CEST)Beantworten

Kapitel gekürzt

Bearbeiten

Der Abschnitt Anwendung enthält ein ausführliches Codebeispiel mit Klassen, Copy-Konstruktor und Zuweisung. Auf dem gegenwärtigen Wissensstand kann der Leser damit überhaupt nichts anfangen. Dieser Teil wurde vorläufig herauskommentiert, vielleicht kann er ins Kapitel über Klassen eingearbeitet werden. Der Abschnitt Wozu dienen die Referenzen? ist hingegen einfach nur redundant und sollte ersatzlos gestrichen werden. --Bernina 15:44, 21. Sep 2006 (CEST)

Sinn des Anwendungsbespiels?

Bearbeiten

Ich hätte da zwei Fragen:

1. Warum ist der Rückgabewert der Funktion nicht void?

2. Wozu brauche ich den in diesem Fall überhaupt Referenzen? Meiner Ansicht nach wäre es einfacher sie einfach wegzulassen, dann braucht man auch den const-Teil nicht.

Call-By-Reference

Bearbeiten

call-by-reference ist keine Neuerung von C++ gegenüber C. Funktionsaufrufe mit Adressen zu Variablen, kennt C sehrwohl auch: http://www.galileocomputing.de/openbook/c_von_a_bis_z/c_014_005.htm#Xxx999331

sorry, I could not resist

Bearbeiten

Entschuldige, dass ich schon wieder in deinen halbfertigen Kapiteln herumeditiere. Hab den Hinweis erst nach meinen Änderungen gelesen. Bitte nicht böse sein. Ich lasse erstmal die Finger davon und warte, bis du mit deinen Änderungen fertig bist. --RokerHRO 13:28, 10. Mär. 2008 (CET)Beantworten

Ich hatte den Hinweis auch erst nach deiner Änderung gesetzt, weil ich wiederum mit deinem Edit in Konflikt geraten bin. Für den Moment bin ich mit meinen Umverteilungen erst mal fertig, du darfst jetzt gerne drüber „meckern“, korrigieren und verbessern. ;-) Viele Grüße --Prog 15:23, 10. Mär. 2008 (CET)Beantworten
Seit meiner letzten Änderung ist ja anscheinend nix mehr passiert. Nunja, ich mach erstmal Feierabend. --RokerHRO 16:14, 10. Mär. 2008 (CET)Beantworten

Verständnisproblem - Grundlagen zu Referenzen

Bearbeiten

Ich verstehe diese Aussage nicht:

 Im Beispiel wurde die Referenz auf int r, mit dem int a initialisiert.

Ich verstehe den Begriff Referenz als Verweis ( http://de.wikipedia.org/wiki/Referenz_%28Programmierung%29 ). Dann hieße das, dass im Beispiel der Verweis auf int r mit etwas initialisiert würde. Ist es nicht so, dass int r selbst der Verweis auf int a ist? Vielleicht denke ich etwas kompliziert, aber würde der Satz folgendermaßen lauten, würde ich ihn verstehen:

 Im Beispiel wurde die Referenzvariable int r mit int a (und damit auch dem Wert von int a) initialisiert.

Ronsn 18:56, 24. Mär. 2008 (CET)Beantworten

Nachtrag: Zum zweiten Beispiel:

 Wie Sie sehen, ist es nicht möglich, r als Alias für b zu definieren,
 nachdem es einmal mit a initialisiert wurde.

Wo genau sieht man das?

Ronsn 23:05, 24. Mär. 2008 (CET)Beantworten

Eine Referenz ist ein Aliasname für eine Variable. Vielleicht sind meine Formulierungen etwas kompliziert gewählt, über eine Verbesserung freue ich mich immer. Allerdings würde deine Aussage nicht ganz stimmen: int r wird nicht mit Wert von int a initialisiert, sondern viel mehr mit dessen Adresse.
Referenzen sind in C++ eigentlich nichts weiter als konstante Zeiger auf Typ (Typ * const Referenzname) die mit der Syntax normaler Variablen verwendet werden. Ein Initialisierung ist daher immer erforderlich. Bei der Initialisierung einer Referent wird festgelegt, auf welche Variable verwiesen werden soll.
Bezüglich deines Nachtrags habe ich einen Kommentar im Quelltextbeispiel ergänzt, der die Stelle anzeigt.
Viele Grüße (ps: Ich hab im moment Stress, deshalb brauchen meine Antworten zum Teil lange, bitte nicht Böse sein) :) --Prog 13:58, 8. Apr. 2008 (CEST)Beantworten

Verständnisproblem 2

Bearbeiten
Wäre der int in ausgabe2() nicht konstant, also eine normale Referenz auf int, könnte man ausgabe2() 
nur mit einer Variable aufrufen, denn die Zahl 5 ist ja ein konstanter int-Literal.

Das kommt leider überhaupt nicht rüber. Der zu dem Beispiel einleitende Text ist auch komisch, spricht von *zwei* Variablen und zeigt dann nur eine.

In Verbindung mit Klassenobjekten ist diese Art der Übergabe sehr viel schneller, dazu erfahren Sie aber zu gegebener Zeit mehr. 
Für die eingebauten Datentypen, die Sie bisher kennen, ist tatsächlich die Übergabe als Wert effizienter.
Der Text danach hängt irgendwie zusammenhangslos am Beispiel.

77.132.179.27 03:44, 4. Aug. 2008 (CEST)Beantworten

Hab's ein wenig überarbeitet, hoffe es ist jetzt verständlicher. --Prog 15:58, 4. Aug. 2008 (CEST)Beantworten

Anwendung von Referenzen -> Selbstdefinierte Referenzen

Bearbeiten

Sorry, aber mir ist nicht klar was das Beispiel eigentlich genau tut oder was "size_t" für ein Typ ist. Eventuell wäre ein bisschen erklärender Text an dieser Stelle hilfreich! :D

(Ja, ich hab's mal durchlaufen lassen, allerdings ergibt es nur eine massive Folge von ?zufälligen? Zahlen. Hatte zuerst gedacht, es handele sich einfach nur um einen Iterator über das Array, aber da liege ich glaube ich falsch) --88.70.68.168 18:39, 28. Jul. 2010 Unterschrift nachgetragen --Prog 01:02, 1. Aug. 2010 (CEST)Beantworten

(Die Frage bezog sich auf die Version 18:41, 28. Jul. 2010)
Da liegst du schon richtig, die Schleifen iterieren über das Array. Selbiges enthielt aber nur Zufallszahlen, da es nicht initialisiert wurde. Genaugenommen enthielt es also die Werte, die zum Zeitpunkt der Programmausführung noch zufällig in dem Speicherbereich standen, der dem Array zugewiesen wurde. Hab das ganze mal etwas überarbeitet. Was size_t angeht so handelt es sich um ein typedef für einen Ganzzahligen (typischerweise positiven) Typ, welches in der Headerdatei cstddef im Namensraum std definiert ist. Was size_t konkret ist wird vom C++-Standard nicht festgelegt, auf meinem System handelt es sich zum Beispiel um einen unsigned long. Folgender Code-Schnippsel sollte deinen Linker veranlassen eine Fehlermeldung zu generieren, aus der du den Typ ablesen kannst:
#include <cstddef>
template < typename T > void test(T);
int main(){
    std::size_t t;
    test(t);
}
PS: Unterschreibe deine Beiträge bitte mit --~~~~ ;) Gruß --Prog 01:02, 1. Aug. 2010 (CEST)Beantworten
Zurück zur Seite „C++-Programmierung/ Weitere Grundelemente/ Referenzen“.