Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

C++ Grundkurs

Unions

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Unions stellen besondere Klassentypen in C++ dar. Diese nehmen ausschließlich einen Wert für ein Attribut zu einem bestimmten Zeitpunkt auf.
03:58

Transkript

In dieser Lektion möchte ich Ihnen den Klassentyp "Union" vorstellen. Der Klassentyp "Union" ist ein ganz besonderer Klassentyp. Im Gegensatz zu "class" und "struct", die ziemlich ähnlich sind, unterscheidet er sich deutlich. Es geht damit los, dass im Klassentyp "Union" immer nur ein Attribut einen Wert annehmen kann. Das heißt, der Klassentyp "Union" benötigt nur so viel Platz wie sein größtes Attribut. Das ist auch der Hauptgrund, wieso man Klassentypen Union verwendet. Er spart Speicher. Die Zugriffsrechte sind per Default "public". Er kann keine virtuellen Methoden besitzen. Er kann keine Referenzen annehmen. Er kann weder von Klassentypen abgeleitet sein, noch kann von ihm eine Klasse abgeleitet werden. Jetzt noch eine sehr spezielle Regel. Falls ein Union ein Attribut enthält, das spezielle Methoden besitzt, werden diese auf "delete" gesetzt. Das zeige ich gleich im Beispiel. Ein Attribut, das spezielle Methoden enthält, wäre z.B. ein "std::string". Das heißt, wenn Sie einen "std::string" in Union verwenden, da werden dessen spezielle Methoden auf "delete" gesetzt. Sie müssen also die speziellen Methoden selber implementieren. Das zeige ich jetzt in der Anwendung. Aber erst zum einfacheren Fall. Ich habe hier zwei einfache "Unions". Eines hält zwei "Characters" "a" und "b". Das andere Union enthält einen Character "a" und ein Double "d". Wie kann ich jetzt mit denen interagieren? Zuerst setze ich den Wert auf "a" von der Union "MemorySizeChar". Damit wird der erste Wert der Union, in diesem Fall "a", auf das Zeichen "a" gesetzt. Dann kann ich es ausgeben und Sie sehen, ich bekomme "a" heraus. Setzte ich jetzt b auf b, kann ich b abfragen und bekomme den Wert b. Interessant sind die Zeilen hier. Wenn ich mir die Größe vom "mSC" anschaue, das ist ein Objekt von Typ "MemorySizeChar". Wenn ich mir Größe vom "mSD" anschaue, das ist ein Objekt vom Typ "MemorySizeDouble". Dann ist das erste Objekt 1 Byte groß und das zweite 8 Byte groß. Was ist der Grund? Der größte Datentyp hier ist ein "Character". Der ist 1 Byte groß. Der Datentyp hier ist ein "Double" und der ist eben 8 Byte groß. Jetzt komme ich zur Union, die ein Attribut enthält, das spezielle Methoden besitzt. In diesem Fall ist es das "std::string". "std::string" besitzt spezielle Methoden. Eine spezielle Methode ist der "Standard-Konstruktor" und eine spezielle Methode ist der "Default-Destruktor". Da diese Methoden jetzt auf "default" gesetzt sind, muss ich sie selber implementieren. Das mache ich hier. Ich spendiere der "Union" einen "Default-Konstruktor". Den verwende ich, um das Datenmitglied "s" auf "hello" zu initialisieren und ich spendiere ihm einen "Destruktor". Das schaut noch relativ moderat aus. Anspruchsvoller wird die Anwendung. Hier initialisiere ich ein Objekt vom Typ "UnionWithString" "uWithString". Jetzt kann ich den String ausgeben. "uWithString.s" gibt eben "hello" aus, weil der Konstruktor hier ausgeführt wurde. Schwieriger wird es jetzt aber, wenn ich auf ein anderes Attribut der Union umschwenke. Was heißt das? Ich will das Attribut "i", steht für ein "int", auf 10 setzen. Dazu muss ich jetzt den Destruktor von meinem Datenmitglied "s" explizit aufrufen. Das ist der explizite Aufruf des Destruktors hier "~string()". Danach kann ich "i" auf 10 setzen und ich kann die 10 ausgeben und Sie sehen, in meiner Union ist jetzt das aktive Mitglied die Variable i vom Typ "Integer". Jetzt will ich aber wieder den String setzen. Den String "s", um konkret zu sein. Dazu verwende ich den Speicher von hier oben, den ich hier oben schon erhalten habe. In diesen Speicher hinein initialisiere ich den neuen String und der ganze Ausdruck nennt sich hier "Placement new". Das heißt, ich verwende für den Inhalt meines "std::string.s" den Speicher, den ich hier oben schon angelegt habe und schreibe da diesen neuen Wert rein “hello again“. Danach gebe ich ihn aus und zum Schluss rufe ich den Destruktor wieder auf. In dieser Lektion habe ich Ihnen "Unions" vorgestellt. "Unions" sind ganz besondere "Klassentypen". Sie unterscheiden sich deutlich von den anderen zwei Klassentypen "struct" und "class". Das Entscheidende an "Unions" ist, dass sie mehrere Attribute enthalten können, wobei immer nur der Wert eines Attributs gesetzt ist.

C++ Grundkurs

Steigen Sie in die mächtige Programmiersprache C++ ein und lernen Sie dabei alle wichtigen Funktionen mit Anwendungsbeispielen kennen.

8 Std. 14 min (147 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

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!