Opslagklassen in C++
Een opslagklasse definieert het bereik (zichtbaarheid) en de levensduur van variabelen en/of functies binnen een C++-programma. Deze specificaties gaan vooraf aan het type dat ze wijzigen. Er zijn de volgende opslagklassen die in een C++-programma kunnen worden gebruikt
- automatisch
- registreer
- statisch
- extern
- veranderlijk
De automatische opslagklasse
De automatische opslagklasse is de standaard opslagklasse voor alle lokale variabelen.
{ int mount; auto int month; }
Het bovenstaande voorbeeld definieert twee variabelen met dezelfde opslagklasse, auto kan alleen worden gebruikt binnen functies, d.w.z. lokale variabelen.
De registeropslagklasse
Het register storage class wordt gebruikt om lokale variabelen te definiëren die in een register moeten worden opgeslagen in plaats van in RAM. Dit betekent dat de variabele een maximale grootte heeft die gelijk is aan de registergrootte (meestal één woord) en dat er geen unaire '&'-operator op kan worden toegepast (omdat deze geen geheugenlocatie heeft).
{ register int miles; }
Het register mag alleen worden gebruikt voor variabelen die snelle toegang vereisen, zoals tellers. Merk ook op dat het definiëren van 'register' niet betekent dat de variabele in een register wordt opgeslagen. Het betekent dat het MOGELIJK in een register wordt opgeslagen, afhankelijk van hardware- en implementatiebeperkingen.
De statische opslagklasse
De statische storage class instrueert de compiler om een lokale variabele in stand te houden gedurende de levensduur van het programma in plaats van deze te creëren en te vernietigen elke keer dat deze binnenkomt en buiten het bereik gaat. Door lokale variabelen statisch te maken, kunnen ze daarom hun waarden behouden tussen functieaanroepen.
De statische modifier kan ook worden toegepast op globale variabelen. Wanneer dit wordt gedaan, wordt het bereik van die variabele beperkt tot het bestand waarin het is gedeclareerd.
Wanneer in C++ static wordt gebruikt op een klassegegevenslid, wordt er slechts één kopie van dat lid gedeeld door alle objecten van zijn klasse.
Live demo#include <iostream> // Function declaration void func(void); static int count = 10; /* Global variable */ main() { while(count--) { func(); } return 0; } // Function definition void func( void ) { static int i = 5; // local static variable i++; std::cout << "i is " << i ; std::cout << " and count is " << count << std::endl; }
Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op −
i is 6 and count is 9 i is 7 and count is 8 i is 8 and count is 7 i is 9 and count is 6 i is 10 and count is 5 i is 11 and count is 4 i is 12 and count is 3 i is 13 and count is 2 i is 14 and count is 1 i is 15 and count is 0
De externe opslagklasse
De externe storage class wordt gebruikt om een referentie te geven van een globale variabele die zichtbaar is voor ALLE programmabestanden. Wanneer u 'extern' gebruikt, kan de variabele niet worden geïnitialiseerd, omdat het alleen de naam van de variabele naar een eerder gedefinieerde opslaglocatie wijst.
Als je meerdere bestanden hebt en je definieert een globale variabele of functie die ook in andere bestanden wordt gebruikt, dan extern zal in een ander bestand worden gebruikt om een referentie van een gedefinieerde variabele of functie te geven. Gewoon voor het begrijpen van extern wordt gebruikt om een globale variabele of functie in een ander bestand te declareren.
De externe modifier wordt meestal gebruikt als er twee of meer bestanden zijn die dezelfde globale variabelen of functies delen, zoals hieronder wordt uitgelegd.
Eerste bestand:main.cpp
#include <iostream> int count ; extern void write_extern(); main() { count = 5; write_extern(); }
Tweede bestand:support.cpp
#include <iostream> extern int count; void write_extern(void) { std::cout << "Count is " << count << std::endl; }
Hier, extern trefwoord wordt gebruikt om telling in een ander bestand te declareren. Compileer deze twee bestanden nu als volgt −
$g++ main.cpp support.cpp -o write
Dit levert schrijf . op uitvoerbaar programma, probeer write . uit te voeren en controleer het resultaat als volgt −
$./write 5
De veranderlijke opslagklasse
De veranderlijke specifier is alleen van toepassing op klasseobjecten, die later in deze zelfstudie worden besproken. Hiermee kan een lid van een object de functie const-lid overschrijven. Dat wil zeggen, een veranderlijk lid kan worden gewijzigd door een const-lidfunctie.
C Taal