next up previous contents
Next: Klassen Up: Grundlagen von C++ Previous: typedef

Bezugsrahmen von Bezeichnern

Scope bedeuted Bezugsrahmen von Variablen, Funktionen usw.

Die Sprache C++ unterscheidet fünf verschiedene Bezugsrahmen
1. Datei
2. Lokal
3. Funktion
4. Klasse
5. Namensraum

Dateibezugsrahmen
Ein Projekt besteht im Normalfall aus mehreren Dateien. Jedes Modul besteht aus *.cc und *.h. Bei ungewollten Namenskonflikten besteht die Möglichkeit die entsprechende Funktion static zu deklarieren. Ansonsten die Möglichkeit mit extern eine ``gewollten'' Namenskonflikt zu kennzeichnen

Lokaler Bezugsrahmen
Hier gilt, daß lokale Namen globale verdecken. Will man explizit auf globale Namen zugreifen, so verwendet man den scope operator ::.

goto label;
{
  // hier eingefuehrte Variablen sind lokal
  // dieser Block hilft evtl. dem Compiler
}
label:

Eine Alternative zu Variablen mit Filebezugsrahmen sind lokale Variablen in Funktionen, die static deklariert sind. Sie haben einen lokalen Bezugsrahmen, aber eine Lebensdauer, die über den Funktionsaufruf hinausgeht.

Klassenbezugsrahmen
Bezeichner im Klassenbezugsrahmen werden alternativ durch .name, ->name oder für static Variablen Klassenname::name angesprochen. Static Variablen existieren unabhängig von der Instanzbildung nur einmal für die ganze Klasse, d.h. alle Objekte/Instanzen einer Klasse teilen sich eine Variable oder Funktion

Namensräume
Namensräume sind dazu gedacht, größere Einheiten wie z.B. die gesamte Standardbibliothek zusammenzufassen. Durch Ihre Benutzung wird vermieden, daß es bei Benutzung von mehreren großen Programmpaketen zu Problemen wegen doppelt vergebener Namen kommt. Bei der Benutzung von Teilen dieser Pakete spezifiziert man den Namen mit vorangestelltem namespace Name{...} oder importiert diese Teile mit using Direktiven.
namespace Name{
 ....
}

Durch using Direktiven kann man einzelne Elemente oder auch einen ganzen Namensraum ``importieren'', d.h. auf seine Elemente zugreifen ohne explizit anzugeben, in welchem Namensraum sie sich befinden. Allerdings kann man so nur einen Namensraum importieren.


next up previous contents
Next: Klassen Up: Grundlagen von C++ Previous: typedef
© R.Hilfer et al., ICA-1, Univ. Stuttgart
28.6.2002