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

C++ Grundkurs

Geltungsbereiche

Testen Sie unsere 2017 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
C++ verfügt über zahlreiche unterschiedliche Geltungsbereiche. Dazu zählen lokale, globale sowie Klassen, Namensräume oder Dateien.
06:13

Transkript

In dieser Lektion behandle ich die Geltungsbereiche von C++. C++ kennt viele Geltungsbereiche. Ich fange mit dem am meisten verwendeten an, dem lokalen Geltungsbereich. Ein Name besitzt einen lokalen Geltungsbereich, wenn dieser Name innerhalb eines Blocks, wie Sie es hier sehen können, definiert wurde. Das heißt explizit, der Name ist nur in diesem Geltungsbereich sichtbar. Wenn Sie sich die Funktion func hier unten anschauen, dann macht die hier durch die geschweiften Klammern einen Block auf. Das bedeutet, dass int i= 10; nur in diesem Geltungsbereich sichtbar ist und z.B. auch, dass Sie hier automatisch gelöscht wird. Neben dem lokalen Geltungsbereich gibt auch den Klassen-Geltungsbereich. Klassen-Geltungsbereich besagt, dass ein Namen, der in einer Klasse deklariert wurde, Klassen-Geltungsbereich hat. Sie können dann auf diesen Namen von außerhalb der Klasse zugreifen, indem Sie den Auswahloperator Punkt . oder Pfeil - verwenden. Den Auswahloperator Punkt müssen Sie dann verwenden, wenn das Objekt auf einem Stack angelegt wurde, Pfeil, wenn es auf einem Heap angelegt wurde. Wird der Name in der Klasse in einem Block deklariert, besitzt er aber lokalen Geltungsbereich. Das will ich Ihnen zeigen. Schauen Sie sich die Klasse Point an. Die Klasse hat eine Funktion swap und in dieser Funktion swap macht er natürlich einen lokalen Geltungsbereich auf durch diese geschweiften Klammern hier. Damit ist tmp vom Typ lokaler Geltungsbereich. Hingegen x und y sind vom Typ Klassen-Geltungsbereich. Auf der rechten Seite sehen Sie, wie ich die Namen im Klassen-Geltungsbereich verwende. p1 ist ein Point, der auf einem Stack angelegt wird, also kann ich auf x mittels des Punkt-Operators zugreifen. p2 ist ein Objekt, das auf den Heap angelegt wird, also muss ich die Pfeil-Syntax verwenden. Dass Sie auf x und y von außerhalb zugreifen können, hängt damit zusammen, dass x und y öffentlich oder public deklariert wurden. Das ist natürlich keine Selbstverständlichkeit. Neben dem Klassen-Geltungsbereich gibt es auch den Namensraum-Geltungsbereich. Das heißt, wenn ein Name in einem Namensraum angelegt wurde, besitzt dieser Name Namensraum-Geltungsbereich. Das heißt wiederum, dass Sie auf diesen Namen zugreifen können, wenn Sie den Bereichsoperator :: verwenden. Insbesondere gibt es hier keine Einschränkungen der Zugriffsberechtigungen. Ein Beispiel habe ich hier. Ich habe hier den Namensraum Date, in dem habe ich eine const int Variable definiert, ihr den Wert 3 gegeben und so kann ich von außerhalb darauf zugreifen über Date, den Namen des Namensraums und den Bereichsoperator. Dann gibt es noch die globalen Geltungsbereiche. Der globale Geltungsbereich besitzt einen Namen dann, wenn dieser Name nicht in einem Block, in einer Klasse oder im Namensraum definiert wurde. Das ist also eine Negativdefinition. Ein Beispiel habe ich hier. int globVar; ist weder in einem Block, noch in einer Klasse, noch in einem Namensraum definiert, von daher besitzt er globalen Geltungsbereich. Das bedeutet aber auch, dass globVar default initialisiert wird. locVar hingegen nicht. Von daher muss ich das hier explizit initialisieren. locVar hat lokalen Geltungsbereich. Das sehen Sie hier. Durch diese geschweiften Klammern geht der lokale Geltungsbereich auf. Wird eine Variable mit globalem Geltungsbereich wie hier unten noch durch Statik ausgezeichnet, besitzt sie Datei-Geltungsbereich. Dieser Name ist nur innerhalb der Datei sichtbar. D.h. aber auch, dass diese Variable globVar default initialisiert wird. Jetzt komme ich zum Geltungsbereich, dem eingebetteten Geltungsbereich. Es kann natürlich sein, dass Geltungsbereiche ineinander verschachtelt sind. Das bedeutet, dass sie aus einem inneren Geltungsbereich auf den Namen eines äußeren Geltungsbereichs zugreifen können, wie Sie es hier sehen. int var{2011}; kann ich in der Funktion print Var verwenden, da ich auf den äußeren und umgebenden Geltungsbereich zugreifen kann. Wenn ich aber im inneren Geltungsbereich den gleichen Namen verwende wie im äußeren, dann überdeckt die Variable im inneren Geltungsbereich die im äußeren. Das bewirkt, dass var hier 2014 ausgibt. Die viele Theorie zu Geltungsbereichen will ich jetzt Ihnen noch in einem Beispiel zeigen. Hier habe ich ein Programm. Oben lege ich als erstes eine globale Variable an, die wird default initialisiert, da es eine globale Variable ist. Hier definiere ich nur eine Klasse. Hier wird noch nichts instanziiert. Die Klasse enthält zwei Klassen-Variablen x und y. Diese haben natürlich Klassen-Geltungsbereich. s hat Namensraum-Geltungsbereich, weil es innerhalb des Namensraums Scope angelegt wurde. Jetzt zeige ich Ihnen, wie ich die Variablen hier anwende. Zusätzlich lege ich hier noch eine lokale Variable double an und eine lokale Instanz von Point p. Jetzt zeige ich Ihnen die Ausgabe. globVar ist eine globale Variable. Diese Variable wird default initialisiert. Es ist also wohldefiniert, dass hier 0 als Ergebnis steht. Das trifft auf all die Variablen hier mit Ausnahme von Scope.s nicht zu. Diese Variablen hier besitzen keinen wohldefinierten Wert. Sie geben zwar 0 aus, aber das ist reiner Zufall. Das ist undefiniertes Verhalten. Warum? locVar ist lokal angelegt. ist also eine Variable mit lokalem Geltungsbereich. Das Gleiche trifft auf p zu und damit auch auf die Variablen von p. Das x und das y, diese Klassen-Variablen wurden nicht default initialisiert. Ein Stückchen weiter im Text. Hier habe ich noch einen eingebetteten Geltungsbereich. In dem lege ich eine Variable, eine lokale Variable, locVar an, gebe ihr den Wert 3.14 und wenn ich mir den Wert hier ausgeben lasse, sehen Sie, der Wert der lokalen Variable wird verwendet bzw. die lokale Variable wird verwendet. Nachdem Block gibt es diese lokale Variable natürlich nicht mehr. Die findet ihre Gültigkeit. Ist nicht mehr im Geltungsbereich und damit wird hier wiederum locVar = 0 ausgegeben. In dieser Lektion habe ich Ihnen habe ich Ihnen einen Überblick über die Geltungsbereiche in C++ gegeben. Es gibt viele Geltungsbereiche in C++. Lokalen Geltungsbereich, globalen Geltungsbereich, Klassen-Geltungsbereich, Namensraum-Geltungsbereich und Datei-Geltungsbereich.

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!