namespaces c
Een compleet overzicht van naamruimten in C ++ met eenvoudige voorbeelden.
Tot dusver hebben we in onze vorige tutorials alles gezien over variabelen, declaraties, functies en andere soortgelijke entiteiten die in C ++ worden gebruikt.
Tijdens het ontwikkelen van applicaties in C ++ kunnen er enkele vreemde situaties ontstaan, zoals dezelfde variabelenamen die twee keer worden gebruikt of functies die zijn gedefinieerd met dezelfde prototypes enz. Wanneer deze scenario's zich voordoen, wordt het moeilijk voor de compiler om de juiste variabele of functieaanroep af te leiden die aanleiding geeft tot ambiguïteit .
Bekijk hier de perfecte C ++ trainingsgids.
Wat je leert:
- Wat is een naamruimte?
- Een naamruimte definiëren
- Toegang tot Namespace-leden
- De gebruiksrichtlijn
- Geneste naamruimten
- Externe naamruimten
- Aaneengesloten naamruimten
- Gevolgtrekking
- Aanbevolen literatuur
Wat is een naamruimte?
Laten we het onderstaande voorbeeld eens bekijken:
Uitgang:
In functie ‘int main ()’:
8:10: fout: conflicterende declaratie ‘dubbele var’
7: 7: opmerking: vorige declaratie als ‘int var’
In het bovenstaande voorbeeld hebben we twee variabelen gedefinieerd met verschillende typen maar dezelfde identifier. Dus wanneer we dit voorbeeld compileren, krijgen we een foutmelding zoals weergegeven in het uitvoervenster. Deze tegenstrijdige verklaringen ontstaan doordat dezelfde identifier wordt gebruikt om twee variabelen te noemen.
Dit soort situaties geeft aanleiding tot onduidelijkheid in aanvragen.
C ++ introduceert iets genaamd ' naamruimten ”Om dit probleem op te lossen. De naamruimte in C ++ is net als een pakket of een regio of een bibliotheek die wordt gebruikt om onderscheid te maken tussen de variabele of functies met dezelfde ID's.
Een naamruimte kan variabelen, functies, klassen of andere objecten en zelfs een andere naamruimte bevatten. Elk lid van de naamruimte kan worden verwezen met behulp van een naamruimtespatie. Dit helpt de compiler om onderscheid te maken tussen verschillende programmeerentiteiten, zelfs als ze dezelfde naam hebben.
Een naamruimte definiëren
In C ++ kunnen we een naamruimte definiëren met het trefwoord ' naamruimte ”Zoals hieronder weergegeven:
Dus als we een naamruimte met de naam 'test_space' moeten definiëren, kunnen we dit als volgt doen:
De bovenstaande verklaring definieert een naamruimte genaamd 'test_space'. Zoals getoond heeft het een integer variabele var als het lid.
Toegang tot Namespace-leden
Nu hebben we onze eigen naamruimte 'test_space' gedefinieerd en hoe krijgen we toegang tot de inhoud van deze naamruimte?
beste gratis anti-spyware voor pc
In het C ++ -programma hebben we toegang tot de leden van de naamruimte met behulp van de syntaxis:
Dus de integervariabele var gedeclareerd in de naamruimte 'test_space' hierboven kan als volgt worden benaderd:
Zie het volledige voorbeeld hieronder om naamruimten en het gebruik ervan te demonstreren.
Uitgang:
lokale var = 20.53
test_space :: var = 10
We hebben alles gedemonstreerd over het maken van en toegang krijgen tot een naamruimte in het bovenstaande programmeervoorbeeld. Zoals we zien, is 'test_space' een naamruimte die we hebben gedefinieerd. Het heeft een enkele integer-variabele var die erin is gedefinieerd. Dan hebben we in de hoofdfunctie nog een dubbele variabele var die wordt geïnitialiseerd.
Later laten we beide variabelen zien. Merk op dat hoewel de lokale dubbele variabele in de main direct kan worden afgedrukt, om de naamruimtevariabele af te drukken, we deze vooraf moeten laten gaan met de naamruimtenaam.
Dit heeft ook gezorgd voor het probleem van botsingen tussen de variabelen vanwege dezelfde namen die we eerder bespraken.
De gebruiksrichtlijn
In ons vorige onderwerp hebben we gezien dat we toegang hebben tot naamruimteleden met behulp van naamruimte_naam :: naamruimte_member.
Als we niet overal in het programma een naamruimtenaam willen specificeren, kunnen we gebruik maken van de “ gebruik makend van ”Om de naamruimte in het programma op te nemen.
Dit gaat als volgt:
Uitgang:
lokale var = 20.53
test_space :: var = 10
In het bovenstaande voorbeeld hebben we twee instructies gebruikt na het definiëren van de naamruimte 'test_space'.
Dit zijn:
De eerste instructie gebruikt de declaratie om toegang te krijgen tot de naamruimte 'std', wat een vooraf gedefinieerde standaardnaamruimte is in de C ++ - bibliotheek. Deze naamruimte wordt gebruikt om toegang te krijgen tot verschillende functies zoals cin, cout, enz.
De tweede instructie wordt gebruikt om de naamruimte 'test_space' in het programma op te nemen.
In de hoofdfunctie kunnen we zien dat de functies zoals cout en variabele var niet hoeven te worden voorafgegaan door een naamruimtenaam. We kunnen er rechtstreeks naar verwijzen. Maar aangezien var een naam heeft die botst met een lokale variabele in de hoofdfunctie, verwijzen we ernaar met de scope resolution operator (: :) aangezien naamruimten ook altijd een globale scope hebben.
Geneste naamruimten
C ++ maakt het ook mogelijk om geneste naamruimten te hebben, d.w.z. een naamruimte gedefinieerd in een andere naamruimte.
De algemene syntaxis van geneste naamruimten is als volgt:
Als we toegang tot ns2_code nodig hebben, kunnen we dit als volgt openen:
Laten we de geneste naamruimten demonstreren met behulp van het volgende codevoorbeeld.
Uitgang:
lokale var = 20.53
eerste :: var = 10
beste gratis pc-optimalisatiesoftware
tweede :: var = 20
We hebben geneste naamruimten gebruikt in het bovenstaande programma. Let op de manier waarop het gebruik van richtlijn wordt gebruikt om toegang te krijgen tot naamruimten. Het is niet voldoende om slechts één keer naar de binnenste naamruimte te verwijzen. Als we een code uit de buitenste naamruimte nodig hebben, moeten we deze apart verwijzen.
We kunnen een andere naam gebruiken voor naamruimten die bekend staat als een 'alias'. Dit is vooral handig bij het gebruik van geneste naamruimten en de mate van nesten is hoog.
We kunnen de alias voor een naamruimte demonstreren door het bovenstaande voorbeeld te wijzigen.
Uitgang:
lokale var = 20.53
eerste :: var = 10
tweede :: var = 20
Let op de geneste alias die is gedefinieerd voor de naamruimte first :: second. Zodra een alias is gedefinieerd, kunnen we naar de naamruimte verwijzen met een aliasnaam.
Externe naamruimten
Als we te veel naamruimten hebben om in onze applicatie te gebruiken, willen we soms alle naamruimten in een apart bestand plaatsen. Dit kan eenvoudig worden gedaan. Als de naamruimten in het afzonderlijke bestand staan, nemen we dat bestand gewoon op in ons programma en gebruiken we de naamruimten en de inhoud ervan rechtstreeks in ons programma.
Bijvoorbeeld, als we een bestand hebben met de naam ns.h dat de volgende naamruimte bevat.
Nu kunnen we in ons programma de naamruimte 'eerste' als volgt gebruiken:
Dus als we het bestand met de naamruimten eenmaal in ons programma hebben opgenomen, kunnen we de naamruimten gebruiken alsof het globaal in hetzelfde programma is gedeclareerd.
Aaneengesloten naamruimten
Met C ++ kunnen we ook iets definiëren dat als aaneengesloten naamruimten wordt genoemd. Aaneengesloten naamruimten zijn de naamruimten die meer dan eens zijn gedefinieerd door dezelfde naam te hebben. In werkelijkheid zijn dit geen aparte naamruimten maar de extensies van dezelfde naamruimte.
Aaneengesloten naamruimten zijn duidelijk in het onderstaande voorbeeld.
Uitgang:
lokale var = 20.53
eerste :: var = 10
tweede :: var = 20
Merk in het bovenstaande voorbeeld op dat we dezelfde naamruimte twee keer hebben gedefinieerd. In de eerste definitie hebben we een variabele met de naam var. In de tweede declaratie hebben we een andere naamruimte gedefinieerd.
In de hoofdfunctie hebben we toegang tot de leden van zowel de buitenste als de binnenste naamruimte en merken op dat de leden gemakkelijk toegankelijk zijn.
Dit is het voorbeeld van aaneengesloten naamruimten, die soms ook wel 'onderbroken naamruimten' worden genoemd. Hun definities lijken gescheiden, maar in werkelijkheid zijn het doorlopende naamruimten.
Gevolgtrekking
Hiermee zijn we aan het einde gekomen van deze tutorial over naamruimten in C ++. Naamruimten op een manier die ons in staat stelt onze code in verschillende ruimtes of regio's te scheiden, zodat we duidelijkheid hebben bij het lezen ervan en ook bij het gebruik van de leden ervan.
In onze volgende tutorials zullen we meer leren over de verschillende basisonderwerpen van C ++, zoals het afhandelen van uitzonderingen, het invoeren / uitvoeren van bestanden, enz.
Kijk hier om AZ van C ++ trainingshandleidingen hier te zien.
Aanbevolen literatuur
- Beste GRATIS C # Tutorial-serie: de ultieme C # -gids voor beginners
- Laadtests met HP LoadRunner-zelfstudies
- Bibliotheekfuncties in C ++
- 70+ BESTE C ++ Tutorials om GRATIS C ++ Programmeren te leren
- Objectgeoriënteerd programmeren in C ++
- Initializer-lijsten in C ++
- Iteratoren in STL
- Inkapseling in C ++