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

C++ Grundkurs

Speicherklassen

Testen Sie unsere 2015 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Die Speicherklasse einer Variablen oder die Instanz einer Klasse bestimmt in C++ deren Lebensdauer sowie Bindung.
05:32

Transkript

In dieser Lektion möchte ich die Speicherklassen von Variablen und Instanzen einer Klasse genauer vorstellen. Die Speicherklasse einer Variablen oder einer Instanz einer Klasse bestimmt die Lebensdauer und die Bindung dieser Variablen oder Instanz. Die Speicherklasse wird zum einen implizit vorgegeben, indem die Variable in einem gewissen Bereich bekannt gemacht wird oder man kann sie auch explizit angeben, indem Schlüsselwörter wie extern oder static verwendet werden. Zuerst zur globalen Variable. Die globale Variable wird automatisch initialisiert und sie existiert für die ganze Lebenszeit des Programms. Das unterscheidet sie von der lokalen Variable, die nämlich nicht automatisch initialisiert wird und genau dann beendet wird, wenn der Block verlassen wird. Dann gibt es noch Attribute einer Klasse. Das sind Instanzen einer Klasse, die jedes Objekt einer Klasse besitzt. Nun zu den Speicherklassen static, extern und mutable. static, hier muss man ein paar Regeln im Kopf behalten. Lokale Variablen bleiben erhalten, wenn sie als static deklariert sind. Globale Variablen und freie Funktionen besitzen Dateisichtbarkeit. D. h., Sie können sie nur aus dieser Datei, indem Sie diese Variable erklärt haben, verwenden. Wenn Sie eine Variable einer Klasse als static deklariert haben, nutzen alle Instanzen einer Klasse das gleiche Attribut. Das Entscheidende ist, dass Sie dann auch diese statische Methode oder auch das statische Attribut verwenden können, ohne dass Sie Instanz einer Klasse brauchen. Dann noch die Speicherklasse extern. Wenn Sie eine globale Variable als extern deklarieren, wird die Definition zur Deklaration. mutable, das ist eine ganz besondere Speicherklasse. Wenn Sie eine Variable einer Klasse als mutable deklarieren, können Sie diese Variable in Methoden, die const qualifiziert sind, verändern. Normal wäre das nicht möglich, weil die Methode const ist. mutable erlaubt es aber trotzdem. Das war natürlich wieder einiges an Theorie, nun folgt die Praxis. Ich zeige Ihnen ein paar Beispiele zu Speicherklassen. Diese Variable global habe ich außerhalb jedes Blockes definiert, außerhalb von main und es ist keinem Block bekannt. D. h., diese Variable hat globale Gültigkeit oder globalen Speicherbereich. D.h. wiederum noch weiter, diese Variable wird automatisch default initialisiert, in diesem Fall 0 erstens, und zweitens heißt das, diese Variable lebt für die ganze Lebenszeit des Programms. Jetzt gehe ich ein Stückchen weiter. Hier habe ich eine Klasse definiert: myClass. Hier verwende ich einen Konstruktor, um die Instanzvariable inst zu definieren, eben auf den Wert v, und ich habe hier noch eine Variable val, die ich als static deklariert habe. Genauso wie ich die Methode getVal auch als static deklariert habe. D. h. - und das ist das Entscheidende -, dass alle Instanzen der Klasse myClass diese eine Variable val verwenden. D. h. aber auch, dass ich auf val oder auch auf getVal zugreifen kann, ohne eine Instanz einer Klasse zu verwenden. Ich kann sozusagen über den Klassenbereich zugreifen. Das zeige ich Ihnen aber gleich. Das Besondere an statischen Variablen von Klassen ist, dass Sie sie außerhalb der Klasse definieren müssen. Das ist hier nur eine Deklaration. Sie macht den Namen nur bekannt. Hier folgt die Definition. In diesem Fall definiere ich sie auf den Wert 5. Dann bin ich schon im Main Programm. Da zeige ich Ihnen, ich gebe hier die globale Variable aus und hier die lokale. Diese Werte sehen Sie hier. Dass die globale Variable den Wert 0 hat, das ist wohl definiert. Das ist eine globale Variable. Dass die lokale Variable lokal den Wert 0 hat, ist aber undefiniertes Verhalten. Dieser Wert kann beliebig sein. Warum? Weil lokal innerhalb eines Scopes, eines Blockes, definiert ist, und der Scope in diesem Fall ist die Main Funktion. Diese Variable müsste ich initialisieren. Dann habe ich hier eine kleine Schleife. Die Schleife geht von 0 nach 2. D. h., sie wird zweimal durchlaufen. Am Anfang der Schleife definiere ich eine Instanz vom Typ myClass. myClass11 und myClass14 initialisiere ich mit dem Wert 2011 und 2014, damit Sie einfach etwas sehen. Dann gebe ich die Werte aus. Das sehen Sie hier. myClass11.inst gibt 2011 aus. Die gibt 2014 aus. Dann - hier wird es interessant - erkläre ich eine statische Variable, initialisiere sie mit dem Wert 0. Das Wichtige daran ist, dass ich diesen Wert 0 in der nächsten Zeile um 1 inkrementiere und Sie sehen, dieser Wert ersetzt dann den Wert 1. Wenn ich diese Schleife nochmal durchlaufe, weil es eine statische Variable ist, wird die Variable weiter benutzt, und der Wert erhöht sich von 1 auf 2. Im Gegensatz dazu wird myClass11 und myClass14 immer genau hier am Ende dieser For-Schleife destruiert, gelöscht und immer wieder neu hier angelegt. Hier sehen Sie val mit dem Wert 2. Noch ein weiteres Beispiel. MyClass besitzt eine statische Variable val und eine statische Methode getVal, und die kann ich schön über den Klassennamen ausgeben. MyClass::val und MyClas::getVal. In dieser Lektion habe ich Ihnen Speicherklassen vorgestellt, zum einen die impliziten Speicherklassen, die Sie haben, weil sie den Namen in einem gewissen Bereich anlegen, in einem gewissen Block, in einem Scope. Das waren im Wesentlichen global, lokal und in einer Klasse. Dann gibt es noch die Speicherbereiche, die die ergänzen, indem Sie eine Variable als extern, static oder mutable deklarieren.

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!