Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

C++

Brakets-Overload

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Wozu das Überladen der "()"-Operatoren dient, zeigt der Trainer in diesem Video. Lernen Sie die gebräuchlichsten Anwendungsgebiete.

Transkript

Auch die runden Klammern kann man übertladen und damit kann man eine Klasse verwenden, als ov es eine Funktion wäre. Das ist auch recht praktisch. Und dazu wieder unser mystring Beispiel. Hier erst einmal den normalen Konstruktor, das ist ganz wichtig, den Konstruktor mit dem Parameter eines Strings, den kennen wir auch schon, aber der ist jetzt im Prinzip neu und wichtig, der sogenannte Kopierkonstruktor. Der bekommt nämlich als eine Referenz des gleichen Typs, also const mystring muss man da in dem Fall schreiben. Die Idee ist, dass es nämlich das gleiche Objekt kopiert. Wenn man den nicht angibt, wird der Default Konstruktor verwendet und der kopiert einfach eins zu eins alle Elemente. Das klingt ja vernünftig, aber das darf ich natürlich hier nicht weil ich hier ein Pointer habe und er sonst auf den gleichen Speicher zeigen würde, würde er nur den Pointer, also die Adresse kopieren und nicht die Inhalte der Adressen. Damit es richtig funktioniert, machen wir das hier sehr ähnlich wie beim String und kopieren uns einfach die Werte hier mit strcpy rüber. Der Destruktor ist wieder ganz normal, die Ausgabe auch und jetzt geht es eigentlich los. Wir brauchen hier nochmal das Erste, einen Zuweisungsoperator, damit wir auch besser arbeiten können, auch den hatten wir ja schon gemacht den möchte ich hier auch nochmal definieren und der kopiert halt auch das Objekt. Das ist aber nicht zu verwechseln mit dem Kopierkonstruktor, der wird nur bei der Konstruktion des Objektes verwendet, nicht bei der Zuweisung. Bei der Zuweisung wird dann dieses Objekt verwendet, obwohl es wie eine Zuweisung aussieht, im Prinzip ja am Anfang habe ich das aber nicht wenn ich zum Beispiel mit U irgedwas machen wird immer der Kopierkonstruktor verwendet und nicht der Zuweisungskonstruktor, der kommt im normalen Programmcode vor. Nun aber zurück den Klammeroperationen, da habe ich mal zwei definiert, man kann ja durch unerschiedliche Parameter die Signatur jweils anpassen und dann verschiedenes mit machen. Immer wenn Sie sich unterscheiden, kann ich immer wieder neu definieren. Hier möchte ich gern ein Teilbereich von meinem String herauskopieren und ein Ergebnis wieder mit mystring liefern, das ist eigentlich kein Problem, ich lege mir hier aber mit tmp und dazu brauche ich jetzt dern Kopierkonstruktor, *this, eine Kopie von meinem eigenen Objekt an, das soll nämlich das Ergebnis werden und ändere jetzt aber hier nochmal den Charachter Pointer entsprechen ab, nämlich hier wird die Adresse zugewisen auf einen Hilfspointer, das Ende mit 0 belegt und dann entsprechend da wieder verändert. Der Nachteil von der Methode, die wir jetzt hier machen ist, dass der Speicher trotzdem belegt wird vom gesamten String, auch wenn nur ein Teil des Strings jetzt hier noch sichtbar ist und das ist für den Fehlerfall, da übergebe ich einfach einen mystring Pointer in den konstruierten Srring, den kompletten, wenn es im Ragne nicht drine ist, dann kommt einfach der ganze String zurück. Und jetzt haben wir hier noch eine andere Variante, nämlich nur ein Index angeben, wird auch hier der Range geprüft, Kopierkonstruktor aufgerufen und hier entsprechend vom Startwert her ein neuer Pointer erzeugt, das is hier diese Adresse, und dieser Pointer wird dann entsprechend hier wieder verwendet, um einen neuen String zu konstruieren, sehr ähnlich wie wir das hier oben auch gemacht haben. Das ist allerdings nicht so, dass der Speicher jetzt wirklich verschwendet wird auf die gesamte Dauer, das ist hier praktisch hier unten ein bisschen tricky nur gemacht, in dem Moment wo ich hier einen neuen String konstruiere, ist der alte String,der wird nämlich hier mit einem Konstruktor auch automatisch nach dem Return wieder freigegeben und steht dann der Speicherplatzt auch wieder zur Verfügung, also das sieht nur etwas schlimmer aus die Methode, als sie tatsächlich ist, [unverständlich] sauber machen. Wir hätten natürlich jetzt auch mit der [unverständlich]arbeiten können, aber das machen wir lieber nicht. Besser ist es so immer ein neues Objekt zu generieren und das alte wird automatisch freigegeben. So, und dann haben wir hier noch den Operator, Klammer auf, Klammer zu ohne Parameter, der soll einfach den Pointer als Ergebnis zurückliefern. Das Ganze testen wir wir hier ein bisschen aus, schauen uns das mal an was das so passiert. Also hier initialisieren wir den Komplettstring, da geben wir hier s2 mit einem Teilstring, s2.ausgeben, dann s2 nochmal neu zuweisen, hier brauche ich eben auch den Zuweisungsoperator und das Ganze wieder ausgeben. Auch sowas kann man machen. On the fly wird hier eine neue Klasse temporär erzeugt für die Lebensdauer praktisch der Ausgabe und hier entsprechend ab der Position 19 und hier die gesamte Ausgabe s1 ( ), macht ja nichts anderes, als hier einen cout. Und das schauen wir uns mal an was da rauskommt bei der ganzen Geschichte. Hier kommen jetzt die ganzen Teilstrings, Sie können das nochmal genauer nachvollziehen, zu Hause mal prüfen, ob die Indexes auch verständlich sind, denn das ist hier nicht ganz einfach zu verstehen das ganze Ding, Ich falle hier auch selber immer wieder auf diese vielen Pointer rein. Bei der Erklärung haben Sie es ja schon vorher gemerkt, dass ich da ins Stocken geraten bin, aber umso wichtiger ist: Man soll sich hier immer ganz langsam, Stück für Stück hier an das Ganze heranarbeiten, vielleich eine kleine Notiz machen, überlegen was da jetzt welche Pointer wo kopiert und nochmal hier kopiert sozusagen. Und dann kann man das so einigermaßen verstehen. Ich will jetzt gerne mal bei der Gelegenheit hier noch was ausprobieren. Damit Sie das mit dem Destruktor auch mal verstehen, kann ich hier an dieser Stelle ja mal kurz ein cout , da machen wir hier mal sowas: freigabe: und ich gebe den Pointer aus, das muss ich aber nach vorne kopieren, sonst haben wir da schlechte Karten in der Kombination wie ich das jetzt hier drin habe. Endl, das müssen wir ein klein wenig umbauen, und zwar machen wir hier noch in das NULL rein eine geschweifte Klammer auf, so, und dann machen wir hier noch eine geschweifte Klammer zu, [unverständlich], jetzt bin ich hier aber mit der Tastatur durcheinander geraten, das ist immer etwas tricky. So, hier fehlt mir jetzt noch die geschweifte Klammer zu, zack, und die Ausgabe die ich jetzt mit CTRL+C kopiert habe, hole ich mir hier wieder rein und das Ganze tun wir hier noch ein bisschen netter hier darstellen, damit es jetzt hier auch... So, jetzt sieht es vernünftig aus. Jetzt können wir uns nämlich mal die Freigaben anschauen, die automatisch gemacht werden. Mal schauen ob das so fiunktioniert, sie sehen schon, das ist ganz witzig, hier oben wird nämlich schon der String freigegeben, weil wir ja temporär einen verwendet hatten für den Gesamtstring. Der gesamte String wird hier auch wieder freigegeben, dann ist ein kleiner Test wird freigegeben, also jede Menge dynamische Speicherallozierung, freigabe, freigabe, hier kommt dann eingentlich nur ein kleiner Test bei raus und hier auch wieder eine freigabe davon und am Schluss natürlich nochmal von dem entsprechenden String, den wir uns da gemerkt haben. Also auch eine interessante Geschichte, ich lasse das so mal im Programm stehen, können Sie auch mal mit Ruhe anschauen. Das ist ganz nett, dass man das hier kontrollieren kann und so sich mal Überblick verschaft, wann dann was alloziert und wann was freigegeben wird.

C++

Machen Sie sich mit den einfachen Grundlagen zu C++ vertraut und lernen Sie anhand zahlreicher Übungs- und Codebeispiele die Klassenkonzepte, Prozeduren und Funktionen kennen.

9 Std. 3 min (143 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Video-Training auf DVD mit Bonusmagazin

+ Tutorial to go: Mit Videos für iPod, iPhone & Co.

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!