Kann mir jemand eben erklären, wie die Kopierkonstruktoren mit Referenzparameter funktionieren?
-
@SeppJ Das von Bjarne Stourstroup hab ich sogar hier^^ Nur wollte ich eigentlich zuerst mit dem einen Buch fertig werden und dann das nächste lesen.
Das Problem ist halt nur, dass jedes Buch anders aufgebaut ist.
Wenn in Buch A zuerst das eine und dann das andere Thema behandelt wird, kann es sein, dass das nächste Buch zuerst noch n anderes Thema, dann das andere und dann das eine Thema behandelt. Deswegen es sein kann, dass man für Antworten die Quellcodes aus dem nächsten Buch um sich Thema A beizubringen nicht verstehen kann, weil man dafür eventuell noch was wissen muss, was man noch nicht gelernt hat...
Verstehst du was ich meine?
-
@JTR666 Möglicherweise hat die andere Reihenfolge in einem guten Buch ja ihren Grund ...
-
@manni66
Das habe ich selbstverständlich nicht bestritten!
-
@Quiche-Lorraine Was hat er gemacht?
-
Warum hat er in Zeile 11 data = other.data geschrieben?
Wenn du dem Sprecher im Video zugehört hättest, machst er das, um noch einmal deutlicher zu machen, was der Default-Kopierkonstruktor tut und warum das Programm einen Fehler verursacht. Das ganze Video hat doch genau den Sinn, auf die Dreierregel hinzuweisen.
Gut, am Ende empfiehlt der Videomensch, den Kopierkonstruktor einfach zu löschen, soband man Pointer hat. Auch ne Lösung... Aber einfach vector statt char* verwenden und alles wäre automatisch richtig.
-
Dieser Beitrag wurde gelöscht!
-
@SeppJ Also in dem für Dummies-Buch ist die Reihenfolge so, dass man zuerst grundlegend lernt wie man eine Ausgabe macht, dann wie man sein System einrichtet.
Dann im 2. Kapitel, wie man ein Objekt erstellt (Compiler Code::Blocks).
Im 3. Kapitel wie man Daten speichert (also was Variablen sind, welche Typen es gibt, usw.)
Im 4. Kapitel lernt man was Schleifen und if/else sind.
Das nächste Kapitel bezieht sich dann darauf, wie man sein Werk mit Funktionen aufteilt.
Dann kommt im 6. Kapitel das Aufteilen des Quellcodes dran.
Gefolgt vom 7. Kapitel, welches sich mit Pointern befasst.
Und dann im 8. Kapitel kommen Klassen dran.
Insgesamt gibt es 35 Kapitel auf 820 Seiten...
-
Dieser Beitrag wurde gelöscht!
-
@JTR666 : Ist ja schön, aber ich werde jetzt sicher keine Literaturanalyse machen. Es fällt bloß auf, dass Leute die hier mit "dummen" Fragen und grundlegend falschen Codes auftauchen, überproportional solche Bücher gelesen haben, wohingegen Leute, die Bücher von der mir empfohlenen Art gelesen haben, eher mit coolen Designfragen kommen, wie sie ihre guten Programme noch besser machen können.
-
@titan99_ sagte in Kann mir jemand eben erklären, wie die Kopierkonstruktoren mit Referenzparameter funktionieren?:
Also normalerweise will man doch Werte kopieren und keine Adressen?
Dann würde man doch die Pointer dereferenzieren und so die Werte kopieren.
HeapData(const HeapData &other) { auto other_data = other.data; *data = *other_data; }
Bin mir jetzt nicht sicher, wie eine Membervariable direkt dereferenziert wird. Deshalb die zusätzliche Zeile.
Ähh, du solltest das Kapitel wohl selber wiederholen. Da ist alles falsch. Das würde nur das erste Element eines Feldes kopieren, aber es stürzt sowieso in dem Moment ab, wo du den undefinierten Zeiger
data
dereferenzierst. Das macht auch keinen Sinn, hier eine temporäre Variable zu nutzen, selbst wenn der Rest richtig wäre, was den Verdacht aufkommen lässt, dass du denkst, dass hier ganz was anderes passiert, als eigentlich passiert.
-
@SeppJ Also nochmal bei 0 anfangen?
-
@SeppJ Also ist das data im Kopierkonstruktor nicht der Pointer data aus Klasse der als private deklariert wurde?
-
@JTR666 sagte in Kann mir jemand eben erklären, wie die Kopierkonstruktoren mit Referenzparameter funktionieren?:
@SeppJ Also ist das data im Kopierkonstruktor nicht der Pointer data aus Klasse der als private deklariert wurde?
Warum sollte er das nicht sein?
-
@manni66 Eben.^^
Das hab ich mich halt auch gefragt^^
-
Dieser Beitrag wurde gelöscht!
-
int* int_pointer; *int_pointer = *other_int_pointer;
Und wohin wird da jetzt kopiert?
funktioniert = stürzt nicht sofort ab, sondern erst später
-
...und außerdem war im Original
char *data =new char[27]
. Also 27 chars. Und die 27 war einfach mal so gewählt. Was, wenn du in einer Instanz 27 und in der anderen 13476 Chars hast? Das geht so nicht, du müsstest neuen Speicher reservieren usw. Und woher soll der Compiler bei*data = *other.data
irgendwas über Längen wissen?!
-
@titan99_ sagte in Kann mir jemand eben erklären, wie die Kopierkonstruktoren mit Referenzparameter funktionieren?:
Ob es sinnvoll ist und ob Türen für andere Fehler geöffnet werden, ist eine andere, Frage finde ich.
Es wäre dazu gedacht gewesen, um den Unterschied zu zeigen, wenn man Adressen in Pointern kopiert oder Adressen in Pointer dereferenziert und so die Werte kopiert, was ja auch dem Namen Copy entspricht.
So sollte es etwas besser sein.
int int_variable; int* int_pointer = &int_variable; ^ Address-of operator *int_pointer = *other_int_pointer; ^ ^ Dereference operator
-
-
@JTR666 sagte in Kann mir jemand eben erklären, wie die Kopierkonstruktoren mit Referenzparameter funktionieren?:
@SeppJ Also nochmal bei 0 anfangen?
Na, bevor du weiter Quatsch lernst. Je mehr Quatsch du lernst, desto schwieriger wird es, diesen zu vergessen. Besonders weit bist du ja noch nicht, insofern ist jetzt ja noch ein guter Zeitpunkt zu wechseln.
Falls du das anders siehst, stell' dir mal vor, du würdest ein Instrument oder einen Sport anhand von Internetvideos lernen und gingest jetzt zu einem professionellen Lehrer/Trainer. Und der sagt dir, dass du dir eine falsche Haltung angewöhnt hast, weil dich bisher niemand korrigiert hat. Würdest du darauf bestehen, so weiter zu machen, wie bisher? Wohl hoffentlich nicht, auch dann nicht, wenn dir die neue Haltung vom Trainer zuerst schwer fällt, und du damit anfangs Sachen nicht schaffst, die du mit deiner falschen Haltung schon konntest.