Weiter zum Hauptinhalt Dieser Browser wird nicht mehr unterstützt. Show Führen Sie ein Upgrade auf Microsoft Edge durch, um die neuesten Features, Sicherheitsupdates und den technischen Support zu nutzen. Gültigkeitsbereich (C++)
In diesem ArtikelWenn Sie ein Programmelement wie eine Klasse, Funktion oder Variable deklarieren, kann der Name nur "gesehen" und in bestimmten Teilen Ihres Programms verwendet werden. Der Kontext, in dem ein Name sichtbar ist, wird als Bereich bezeichnet. Wenn Sie beispielsweise eine Variable x innerhalb einer Funktion deklarieren, x ist nur innerhalb dieses Funktionstexts sichtbar. Er verfügt über den lokalen Bereich. Möglicherweise haben Sie andere Variablen mit demselben Namen in Ihrem Programm; solange sie sich in unterschiedlichen Bereichen befinden, verstoßen sie nicht gegen die One Definition Rule, und es wird kein Fehler ausgelöst. Für automatische nicht statische Variablen bestimmt der Bereich auch, wann sie im Programmspeicher erstellt und zerstört werden. Es gibt sechs Arten von Bereich:
Ausblenden von NamenSie können einen Namen verbergen, indem Sie ihn in einem eingeschlossenen Block deklarieren. In der folgenden Abbildung wird i innerhalb des inneren Blocks neu deklariert. Dadurch wird die Variable ausgeblendet, die i im äußeren Blockbereich zugeordnet ist. Blockbereich und Name ausblenden Die in der Abbildung dargestellte Ausgabe des Programms lautet wie folgt: i = 0 i = 7 j = 9 i = 0Hinweis Es wird angenommen, dass das szWhat-Argument im Funktionsbereich liegt. Daher wird es so behandelt, als wäre es im äußersten Block der Funktion deklariert worden. Ausblenden von KlassennamenSie können Klassennamen ausblenden, indem Sie eine Funktion, ein Objekt, eine Variable oder einen Enumerator im gleichen Bereich deklarieren. Der Klassenname kann jedoch weiterhin zugegriffen werden, wenn das Schlüsselwort classpräfixiert wird. // hiding_class_names.cpp // compile with: /EHsc #include <iostream> using namespace std; // Declare class Account at global scope. class Account { public: Account( double InitialBalance ) { balance = InitialBalance; } double GetBalance() { return balance; } private: double balance; }; double Account = 15.37; // Hides class name Account int main() { class Account Checking( Account ); // Qualifies Account as // class name cout << "Opening account with a balance of: " << Checking.GetBalance() << "\n"; } //Output: Opening account with a balance of: 15.37Hinweis Jeder Ort, für den der Klassenname (Account) aufgerufen wird, muss die Schlüsselwortklasse verwendet werden, um sie vom globalen Variablenkonto zu unterscheiden. Diese Regel gilt nicht, wenn der Klassenname auf der linken Seite des Bereichsauflösungsoperators (::) auftritt. Namen auf der linken Seite des Bereichsauflösungsoperators gelten immer als Klassennamen. Im folgenden Beispiel wird veranschaulicht, wie sie einen Zeiger mit dem class Schlüsselwort auf ein Objekt des Typs Account deklarieren: class Account *Checking = new class Account( Account );Der Account Initialisierer (in Klammern) in der vorherigen Anweisung hat den globalen Bereich; er ist vom Typ double. Hinweis Die in diesem Beispiel dargestellte Wiederverwendung von Bezeichnernamen gilt als schlechter Programmierstil. Informationen zur Deklaration und Initialisierung von Klassenobjekten finden Sie unter "Klassen", "Strukturen" und "Unions". Informationen zur Verwendung der operatoren für delete den new freien Speicher finden Sie unter neuen und löschenden Operatoren. Ausblenden von Namen mit globalem BereichSie können Namen im globalen Bereich ausblenden, indem Sie denselben Namen explizit im Blockbereich deklarieren. Auf globale Bereichsnamen kann jedoch über den Bereichsauflösungsoperator (::) zugegriffen werden. #include <iostream> int i = 7; // i has global scope, outside all blocks using namespace std; int main( int argc, char *argv[] ) { int i = 5; // i has block scope, hides i at global scope cout << "Block-scoped i has the value: " << i << "\n"; cout << "Global-scoped i has the value: " << ::i << "\n"; } Block-scoped i has the value: 5 Global-scoped i has the value: 7Siehe auchGrundlegende Konzepte |