Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

JossBoss

Treue Seele

  • »JossBoss« ist der Autor dieses Themas

Beiträge: 182

Wohnort: Luxemburg

  • Private Nachricht senden

1

30.07.2005, 21:53

Wozu Referenzen?

Hallo mal wieder diesmal möchte ich wissen, was genau ist eigentlich ne referenz, und wann muss man die einsetzen?? ???

und habe auch ne 2. Frage, also was ist ein Kopierkonstruktor und wann benutzt man den??

PS: Ich bin doch n armes Noob-Schwein :wirbel:

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

2

30.07.2005, 23:09

Also Referenzen machen werst sinn wenn man über den Sinn und die Verwendung von Pointern bescheid weiss.

Ein Pointer ist eine Varible in der die Speicheradresse gespeichert wird, grob gesehen. Wenn man einen Pointer also zugreift, ändert man nicht den Wert sondern dessen Speicheradresse.
Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
int main()
{
    int c;
    plus(5, 2, &c);
    printf("%d", c);
}

void plus(int a, int b, int *c)
{
    *c = a + b;
}


in c lassen sich normalerweise Werte speichern (1, 3, -56....), wir wollen aber das die funktion plus die Werte a und b addiert und in c speichert, ohne das wir mit return arbeiten wollen.

(Bei vielen Funktion muss mit pointern gearbeitet werden, das in einer Funktion nicht nur eine Variable geändert werden soll, sondern mehrere.)

*c Bedeutet, das wir c DEREFERENZIEREN wollen, d.h. wir haben die Adresse in C gespiechert, wollen jetzt aber Zugriff auf die in c verfügbaren Daten.

Diese Daten werden in c durch die Addition gespeichert. (a+b)

Nun zum Hauptprogramm:
Wir deklarieren c: int c;

das heisst das wir hier nicht über eine Adresse verfügen, sondern über unser "Daten Kästchen", das selbe was wir vorher DEREFERENZIERT haben.
Unsere Funktion plus erwartet als dritten Parameter einen Pointer (c*), also eine Adresse. Wir müssen also c REFERENZIEREN, das machen wir mit einer REFERENZ (&c), dadurch kommen wir an die Adresse heran und übergeben die lustig an unsere Funktion.

>Warum muss ich aber nun *c als dritten Parameter erwarten, also einen Pointer und nicht einfach int c, REFERENZIEREN und DEREFERENZIEREN kann ich ja dann auch noch?

Nein kannst du nicht, weil >int c< einen WERT darstellt, woher soll den der Computer wissen unter welcher Adresse nun z.B. 3 liegt?. Wir müssen also eine Adresse direkt übergeben.

Nun zum Kopierkonstruktor.
Also wenn du eine Klasse hast die einen String verwaltet, also einen POINTER, dann brauchst du einen Kopierkonstruktor, weil Pointer nicht berücksichtigt werden. Normalerweise stellt C++ dir direkt verschiedene Konstruktoren bereit.

Diese Funktionieren aber bei Pointern eben nicht mehr.

Ein Kopierkonstruktor ist dazu da eine Kopie von einem Objekt anzulegen
Sie erwarten also als Parameter einzig und allein das Objekt selber.

Beispiel:

C-/C++-Quelltext

1
2
3
CString hello("Hi, wie geht es dir?");
CString hello2(hello1);
CString hello3 = hello1;


Zeile 2 und 3 sind Beispiele für Kopierkonstruktoren

Die zweite Zeile wäre ein explizierter Aufruf eines Copy-Konstruktors.

Aber auch die dritte Zeile!
Man sollte dennoch den Kopieroperator (=) überladen.