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++: Eine eigene String-Bibliothek

Konstruktoren im Einsatz

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Neben dem Standardkonstruktor stehen weitere zur Verfügung: Außer den Kopier- und Verschiebekonstruktoren ist der Konvertierungskonstruktor wichtig, der ein String-Objekt aus einem einfachen C-String erzeugt.
06:01

Transkript

Die Klasse BWString besitzt einen vollständigen Satz an Konstruktoren, einschließlich eines Verschiebekonstruktors. Ich habe hier eine Arbeitskopie der Klasse BWString und die Datei hello.cpp aus den Übungsdateien. Beginnen wir mit der Datei BWString.h Die Konstruktoren finden wir hier unten am Anfang des Public-Abschnitts der Klasse. Wir haben einen Standardkonstruktor, der einen leeren String erzeugt. Es gibt einen Konstruktor, der einen String aus einem C String konstruiert und einen Kopierkonstruktor, der einen String aus einem anderen BWString-Objekt konstruiert. Wir haben einen Verschiebekonstruktor und wir haben den Destruktor. Interessant beim Verschiebekonstruktor, dieses _NOEXCEPT-Makro wird hier definiert im Else-Zweig der ifdef von Microsoft C. Der Grund dafür ist, dass Microsoft C++ noch keinen NOEXCEPT-Modifizierer unterstützt, der Teil von C++ 11 ist. Und so wird stattdessen dieses Makro verwendet. MSC hat ein Makro namens _NOEXCEPT mit Unterstrich. Und so verwende ich dieses Makro und im Else-Abschnitt definiere ich es für die Compiler, die nicht Microsoft C sind, einfach als das Schlüsselwort NOEXCEPT. Und natürlich ist NOEXCEPT erforderlich, damit ein Verschiebekonstruktor arbeiten kann. Hier in der Datei BWString.cpp können wir die Konstruktoren ganz oben sehen. Der Standard-Konstruktor ruft Reset auf und Reset ist irgendwo hier unten zu finden. Reset setzt einfach den gesamten Speicher zurück, löscht den Speicher, setzt den String auf einen Null Pointer und setzt die Länge des Strings auf Null. Und somit ist es lediglich eine Methode, die alles auf seinen Standard-Zustand zurücksetzt. Und das Gleiche wird hier im Destruktor aufgerufen. Und dann haben wir unseren Kopierkonstruktor und wir haben unseren C String-Konstruktor. Beide rufen copy_str auf und copy_str ist irgendwo hier unten zu finden. Hier ist sie. copy_str liest die Länge des übergebenen Strings bis zum Maximum von BWString_MAX_LEN, was hier in der Header-Datei mit 64 K definiert ist. Dann nimmt sie diese Länge und ruft alloc_str und strncpy auf, wobei wir alloc_str irgendwo hier finden. Und da ist sie. alloc_str verwendet new, um einen String der Länge str_len + 1 zuzuordnen. Beachten Sie dabei, dass der Operator New, wenn er mit Klammern am Ende aufgerufen wird, den zugeordneten Speicher mit Nullen füllt. So können wir unsere Funktion strncpy ausführen, die nur bis zu übergebenen Anzahl von Zeichen kopiert, denn der übrige Speicherinhalt wird bereits Null sein und somit auch dieses letzte Byte als Abschlusszeichen eines C Strings. Und dann werden len und str_len gesetzt. Wir haben also diese beiden Dinge hier, wir haben den Zeichenzeiger für den String und wir haben die Länge für diesen String. Und wie Sie sehen rufen beide die Funktion copy_str auf. Und copy_str ist mit dem konstanten Zeichen S definiert. Dies ist ein C String Zeiger, konstanter Zeichenzeiger ist und dennoch übergeben wir ihn einem BWString-Objekt. Und wir können das tun, weil wir diesen Konvertierungs-Operator... Hier ist er... haben, der einen C String von dieser Klasse zurückgibt. Und so erlaubt uns dieser Konvertierungs-Operator das zu tun und der Konvertierungsoperator ist gleich hier. Und er gibt einfach den nackten String zurück. Es ist also überhaupt nicht aufwendig, wenn wir ein Objekt haben. Lediglich diesen String übernehmen und ihn zurückgeben. Gehen wir also weiter und sehen uns einige dieser Konstruktoren bei der Arbeit an. Wenn wir unser Hello World- Programm erstellen und ausführen, verwenden wir natürlich unsere BWString und auch hier verwenden wir diesen Konvertierungs-Operator, um ihm eine Message zu übergeben, der einen konstanten Zeichen-String-Zeiger übernimmt. Da ist also unser C String-Konstruktor. Und ich kann dies hier wegnehmen und sagen: BWString one = "one". Das ist unser C String-Konstruktor. Und BWString two = "one", das wird unser Kopierkonstruktor. Und ich kann einfach Message verwenden und bei den Meldungen ausgeben. Ich erstelle das Projekt und führe es aus. Und hier sind sie. Ich kann auch den Verschiebekonstruktor verwenden, das Projekt erstellen und ausführen. Und jetzt ist der erste - null und zweiter ist - one, weil wir verschoben statt kopiert haben. Die Konstruktoren sind also recht unkompliziert für diese Klasse. Der Verschiebekonstruktor ist der einzige, der ein wenig abweicht. Wie ein Blick auf unseren Verschiebekonstruktor zeigt, kopiert er eigentlich den Zeiger vom anderen Objekt und kopiert die Länge vom anderen Objekt und setzt dann den Zeiger des anderen Objekts auf nullptr und die Länge auf 0. Und zwar deshalb, weil das einfache Kopieren dieser Zeiger tatsächlich wirklich wirklich effizient und schnell ist. Es werden nicht sehr viele Prozessortakte benötigt, es ist lediglich ein Skalar oder Wert und es ist nicht mehr Aufwand, als ob wir einen intelligenten Zeiger und Move verwenden. Wahrscheinlich ist es sogar weniger Arbeit als dies. Und dann rufen wir Reset auf dem anderen Objekt auf, um sicherzustellen, dass es in einem bekannten Zustand verbleibt. Somit ist diese wirklich wirklich unkompliziert. Somit ist der Verschiebekonstruktor der einzige, der ein wenig anders ist, aber er ist trotzdem noch ziemlich einfach. Das sind die Konstruktoren für die BWString-Klasse.

C++: Eine eigene String-Bibliothek

Erstellen Sie eine eigene String-Bibliothek als hundertprozentigen Ersatz für die String-Bibliothek der C++-STL.

37 min (10 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:21.10.2016

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!