type qualifiers storage classes c
Belang van typekwalificaties en opslagklassen in C ++.
In deze Exclusieve C ++ Training Series , zullen we het onderwerp variabelen verder uitbreiden en typekwalificaties en opslagklassen in C ++ in deze tutorial bekijken. Hoewel dit een klein onderwerp is, is het erg belangrijk en significant voor zover het C ++ -programmering betreft.
De typekwalificaties in C ++ veranderen de betekenis van de variabelen of entiteiten waarmee ze worden gebruikt niet, maar voegen alleen extra informatie toe aan de entiteit.
Wat je leert:
Typ kwalificaties in C ++
Typekwalificaties in C ++ voegen extra eigenschappen toe aan de variabele, zoals een variabele die een constante of een vluchtige variabele is.
Typekwalificaties drukken de manier uit waarop een variabele wordt benaderd of waar een variabele in het geheugen wordt opgeslagen door de betekenis of interpretatie van de variabele hetzelfde te houden. Typekwalificaties voegen in zekere zin meer verfijning toe aan variabelen.
In C ++ wordt typekwalificatie gespecificeerd net voor de typespecificatie (datatype) van de variabele.
Typekwalificaties in C ++ worden geclassificeerd zoals hieronder weergegeven:
# 1) const
Type specificatie 'const' is om de objecten van het type const te definiëren. Een const-object of variabele kan niet worden gewijzigd nadat deze is gedeclareerd. Als een poging wordt gedaan om const object of variabele te wijzigen, geeft de compiler een foutmelding. We hebben al gezien over constanten / letterlijk in onze vorige tutorial.
De definitie van constanten met het trefwoord ‘const’ komt overeen met de typekwalificatie ‘const’.
# 2) vluchtig
De typekwalificatie 'vluchtig' betekent dat de waarde van de variabele die als vluchtig is gemarkeerd, kan worden gewijzigd op andere manieren die niet door het programma worden gespecificeerd. De variabelen die vluchtig zijn, veranderen meestal door een aantal externe factoren en niet noodzakelijk door het programma. Met andere woorden, ze zijn vluchtig van aard.
Bijvoorbeeld, een variabele die de temperatuur in een echt woord voorleest, kan vluchtig worden gemaakt omdat de leestemperatuur mogelijk niet volledig door het programma wordt gecontroleerd.
# 3) veranderlijk
'Veranderlijk' type kwalificatie maakt de leden of variabele aanpasbaar.
De veranderlijke kwalificatie wordt meestal toegepast op niet-statische klasseleden van het niet-const en niet-referentietype. Volgens specifieke situaties hebben we mogelijk enkele variabelen nodig om onveranderlijk te blijven (kunnen niet worden gewijzigd) en sommige variabelen moeten veranderlijk zijn. Dit type kwalificatie is erg nuttig als we veranderlijke kenmerken willen.
Opslagklassen in C ++
Tot nu toe hebben we alle C ++ -variabelen in detail besproken. We hebben gezien dat variabelen worden gedeclareerd met hun respectievelijke gegevenstypen en vervolgens in het programma worden gebruikt. Om een variabele volledig te definiëren, hebben we naast hun gegevenstypen ook opslagklassen nodig.
Hoewel we tot nu toe geen opslagklassen voor variabelen hebben gespecificeerd, was er een standaard opslagklasse 'auto' die op alle variabelen werd toegepast.
Dus wat zijn opslagklassen?
Opslagklassen specificeren hoe de variabele of een functie moet worden behandeld door de compiler en hoe opslag moet worden toegewezen aan een variabele. Het definieert de zichtbaarheid of reikwijdte en levensduur van een variabele. Een levensduur van de variabele is hoe lang de variabele actief blijft.
De zichtbaarheid of reikwijdte van de variabele is voor welke functies of modules de variabele toegankelijk zal zijn. Deze opslagklassen worden gespecificeerd vóór het gegevenstype van de variabele.
In C ++ hebben we de volgende opslagklassen:
# 1) Automatische opslagklasse
Dit is de standaard opslagklasse. De opslagklasse “Auto” wordt toegepast op de lokale variabelen en wordt automatisch door de compiler toegewezen aan lokale variabelen. Lokale variabelen die worden voorafgegaan door het trefwoord ‘auto’, blijven actief in de functie waarin ze zijn gedeclareerd en vallen buiten het bereik zodra de functie wordt afgesloten.
Als de variabelen met de 'auto' opslagklasse niet geïnitialiseerd zijn of geen waarde toegewezen krijgen, dan hebben ze rotzooi of ongedefinieerde waarden.
Laten we een voorbeeld bekijken van automatische variabelen in een C ++ -programma.
Uitgang:
Variabele i = 0
Variabele f = 0
Nu kunnen we zien dat I en f de twee lokale variabelen zijn die we hebben gedefinieerd in de functie main met de standaard opslagklasse ‘auto’.
Omdat we er geen waarden aan hebben toegewezen, zien we bij het afdrukken van deze variabelen dat beide waarden = 0 hebben. Dit is volledig afhankelijk van de compiler wat betreft de waarden die aan de auto-lokale variabele moeten worden toegewezen als ze nog geen waarde in het programma hebben gekregen. .
NOTITIE: Vanaf C ++ 11 wordt het auto-sleutelwoord gebruikt voor type gevolgtrekking Dit betekent dat we een code zoals auto i = 10 kunnen gebruiken en het gegevenstype van I wordt direct afgeleid uit de initialisatie die voor i wordt gebruikt. Daarom, als we zoiets als ‘auto float f;’ declareren, zal de compiler een fout weergeven.
Dus gebruiken we meestal geen declaratie voor automatische opslagklasse, omdat wordt geïmpliceerd dat de standaard altijd automatische opslagklasse zal zijn.
# 2) Registreer opslagklasse
Als we een vereiste hebben dat een variabele snellere toegang nodig heeft, gebruiken we registeropslagklasse. Dus in plaats van de variabelen op te slaan in Random Access Memory (RAM), worden deze variabelen opgeslagen in het CPU-register en hebben ze een grootte die gelijk is aan die van een register.
Bovendien, aangezien deze variabelen geen geheugenlocatie hebben, kunnen we de ‘&’ -operator niet gebruiken met deze variabelen.
Het hebben van een variabele met Register-opslagklasse garandeert niet dat de variabele altijd in het register wordt opgeslagen. In plaats daarvan wordt ervan uitgegaan dat de variabele kan worden opgeslagen in een register en volledig afhankelijk is van hardware en implementatie.
Registervariabelen hebben een bereik en levensduur die vergelijkbaar zijn met de automatische variabelen.
Bijvoorbeeld,
De bovenstaande code met één registervariabele geeft dezelfde uitvoer als die met een automatische opslagklasse.
Uitgang:
Variabele i = 0
Variabele f = 0
# 3) Externe opslagklasse
De externe opslagklasse is vereist wanneer de variabelen over meerdere bestanden moeten worden gedeeld. Externe variabelen hebben een globaal bereik en deze variabelen zijn zichtbaar buiten het bestand waarin ze zijn gedeclareerd.
Omdat externe variabelen de variabelen zijn die buiten in een ander bestand zijn gedeclareerd en gedefinieerd, worden ze niet geïnitialiseerd.
Externe variabelen hebben een globaal bereik en de levensduur van externe variabelen is zo lang als het programma waarin het als beëindigd wordt verklaard.
Externe variabelen kunnen als volgt worden gedeclareerd:
In het bovenstaande voorbeeld hebben we twee declaraties van variabelen met dezelfde naam, maar de eerste is de externe variabele die elders is gedefinieerd. Deze externe variabele zal handig zijn als we het bronbestand opnemen waarin de externe variabele temp is gedefinieerd in ons programma.
# 4) Klasse voor statische opslag
Statische opslagklasse vertelt de compiler om de waarde van de variabele gedurende de levensduur van het programma te behouden. Statische variabelen zijn vergelijkbaar met de lokale variabelen, maar worden voorafgegaan door een ‘statisch’ zoekwoord.
In tegenstelling tot lokale variabelen die buiten het bereik vallen nadat de functie is afgesloten, gaan statische variabelen niet buiten het bereik wanneer een functie of blok wordt afgesloten en hun waarden blijven behouden tussen functieaanroepen.
Statische variabelen worden geïnitialiseerd en er wordt slechts één keer tijdens de levensduur van een programma opslag aan toegewezen. Statische variabelen worden op 0 geïnitialiseerd als ze niet al tijdens de declaratie zijn geïnitialiseerd.
Laten we het volgende voorbeeld bekijken om de statische opslagklasse beter te begrijpen.
Uitgang:
printvar call 1: statische variabele var = 1
printvar call 2: statische variabele var = 2
printvar call 3: statische variabele var = 3
printvar call 4: statische variabele var = 4
In de bovenstaande code hebben we een functie ‘printvar’ waarin we een statische variabele var van het type int hebben gedeclareerd. We verhogen deze variabele vervolgens en drukken deze af. In de hoofdfunctie noemen we de printvar-functie vier keer.
Controleer nu de output. De uitvoer laat zien dat bij elke functieaanroep de statische variabele var met 1 wordt verhoogd vanaf de vorige waarde. Dit is de statische opslagklasse die de variabele helpt zijn waarde tussen functieaanroepen te behouden. De statische variabele wordt niet opnieuw geïnitialiseerd voor elke functieaanroep.
We moeten ook opmerken dat we in de functie printvar zojuist de statische variabele hebben gedeclareerd en deze niet hebben geïnitialiseerd. Het is opmerkelijk dat wanneer we de statische variabelen niet initialiseren, ze de beginwaarde 0 krijgen.
Notitie: Statische opslagklasse kan ook worden toegepast op globale variabelen. In dit geval heeft de variabele een globaal bereik en bovendien statische opslag.
# 5) Veranderlijke opslagklasse
De veranderlijke opslagklasse wordt alleen op de klasseobjecten toegepast. Door de veranderlijke opslagklasse toe te passen, kan lid van een object de ‘const’ lidfunctie overschrijven. Dit betekent dat een veranderlijk lid of object kan worden gewijzigd door een lidfunctie die ‘const’ is.
We zullen meer leren over de const-functies en -objecten en over veranderlijke leden in onze latere tutorials wanneer we leren over objectgeoriënteerd programmeren in C ++.
Gevolgtrekking
Dit gaat allemaal over typespecificaties en opslagklassen in C ++. We hopen dat we met deze tutorial alle concepten over opslagklassen en typespecificaties hebben kunnen verduidelijken.
SQL scenario gebaseerde vragen en antwoorden
In onze aanstaande tutorial zullen we meer leren over de verschillende operatoren die in C ++ worden gebruikt, samen met hun gebruik.
Bekijk hier de complete C ++ trainingsserie
Aanbevolen literatuur
- Variabelen in C ++
- Python-variabelen
- Java-interface en abstracte les met voorbeelden
- Typ conversies in C ++
- VBScript-variabelen: variabelen declareren en gebruiken - VBScript Dim
- JMeter-variabelen en functies
- 10 BESTE gratis cloudopslagproviders (online opslag 2021)
- Typen migratietests: met testscenario's voor elk type