Alles wat u moet weten over naamruimte in C ++



Dit artikel geeft u een gedetailleerde en uitgebreide kennis van naamruimte in C ++. Het zijn verschillende soorten en toepassingen in elk programma.

Naamruimte in C ++ wordt gebruikt om code in logische groepen te ordenen en om naambotsingen te voorkomen die vooral kunnen optreden wanneer uw codebase meerdere bibliotheken bevat. In dit artikel komen de volgende tips aan bod:

De behoefte aan naamruimte

Beschouw een situatie, we schrijven een code met een functie genaamd abc () en er is een andere vooraf gedefinieerde bibliotheek beschikbaar met dezelfde functie abc (). Op het moment van compilatie heeft de compiler geen idee naar welke versie van abc () -functie we verwijzen in onze code.





Naamruimte in c ++

eenvoudig samenvoegen sorteerprogramma in c ++

Om deze moeilijkheid te overwinnen is de naamruimte ontworpen en wordt deze gebruikt als aanvullende informatie om vergelijkbare functies, variabelen, klassen, enz. Met dezelfde naam die in verschillende bibliotheken beschikbaar zijn, te onderscheiden. Met behulp van een naamruimte kunnen we de context definiëren waarin namen worden gedefinieerd. In wezen definieert een naamruimte een bereik.



Alle C ++ standaardbibliotheektypes en -functies worden gedeclareerd in de std-naamruimte of naamruimten die in std zijn genest, dus het wordt algemeen gebruikt in de meeste programma's.

Een naamruimte definiëren

Om de naamruimte te definiëren, beginnen we met het trefwoord naamruimte gevolgd door de naamruimtenaam als volgt:

namespace namespace_name {int a, b // codedeclaraties waarbij // a en b worden gedeclareerd in // namespace_name's scope}

Punten om te onthouden bij het definiëren van een naamruimte

  • Naamruimtedeclaraties verschijnen alleen bij globaal bereik.
  • Naamruimtedeclaraties hebben geen toegangsspecificaties.
  • Naamruimtedeclaraties kunnen in een andere naamruimte worden genest.
  • U hoeft geen puntkomma te geven na de sluitende accolade van de definitie van de naamruimte.
  • Naamruimtedefinitie kan worden verdeeld over verschillende eenheden.
#inclusief het gebruik van de naamruimte std naamruimte eerste_functie {void func () {cout<< 'Inside first_function' << endl } } namespace second_function { void func() { cout << 'Inside second_function' << endl } } int main () { // Calls function from first name space. first_function::func() // Calls function from second name space. second_function::func() return 0 }

Uitgang:



Om in het bovenstaande voorbeeld de functie func () twee verschillende keren te definiëren, gebruiken we het naamruimteconcept. We definiëren de eerste functie onder namespace first_function entweede functie onder naamruimte second_function. Om deze functies aan te roepen gebruiken we de scope resolution operator op de volgende manier: first_function :: func () en second_function :: func ().

wat is een javascript-methode

Namespace gebruiken in C ++

Er zijn drie manieren om een ​​naamruimte in het programma te gebruiken,

  1. De gebruikende richtlijn
  2. De gebruikende verklaring
  3. Scope Resolution Operator (: :)

De gebruikende richtlijn

We kunnen voorkomen dat naamruimten met de extensie gebruik makend van namespace-instructie. gebruik makend van trefwoord stelt ons in staat om een ​​volledige naamruimte in uw programma te importeren met een globaal bereik. Het kan worden gebruikt om een ​​naamruimte te importeren in een andere naamruimte of een ander programma volgens onze vereisten.

Beschouw een header-bestand Namespace_first.h:

naamruimte First {int a class First_class {int i}}

Inclusief het bovenstaande header-bestand van de naamruimte in het bestand Namespace_second.h: neem 'Namespace_first.h' op

namespace Second {using namespace First First_class obj int y}

We importeren de namespace_First in namespace_Second, dus klasse First_class is nu beschikbaar in de namespace_Second. Daarom kunnen we het volgende programma in een apart bestand schrijven, laten we zeggen new_file.cpp.

#include 'Namespace_second.h' void test () {using namespace Second // maak object van class First_class First_class obj2}

Vandaar , maakt de instructie using het een stuk eenvoudiger om een ​​naamruimte in C ++ te gebruiken, waar je maar wilt.

De gebruikende verklaring

In de gebruik-declaratie importeren we één specifieke naam per keer die alleen beschikbaar is binnen de huidige scope en wordt aangeroepen met behulp van scope resolution. OPMERKING: de naam die is geïmporteerd met using-declaratie kan de naam die is geïmporteerd met de instructie using overschrijven. We kunnen dit zien in het onderstaande voorbeeld.

Laten we een headerbestand New_File.h beschouwen:

naamruimte Eerste {void A () {cout<< 'A of First namespacen' } } namespace Second { void A() { cout << 'A of Second namespacen' } }

Laten we nu een nieuw programmabestand maken met de naam New_file_2.cpp met onderstaande code:

#include 'New_file.h' void B () {gebruik naamruimte First // gebruik richtlijn met behulp van Second :: A // gebruik declaratie First :: A () // klasse A () van First naamruimte A () // roept A aan () van tweede naamruimte}

Scope resolutie operator (: :)

We kunnen expliciet elke naam specificeren die in een naamruimte is gedeclareerd met behulp van de naam van de naamruimte en de scope-resolutie ' :: ' operator met het ID.

namespace New_space {class X {static int i public: void func ()} // class name declaratie class Y} // Initialiseren van statische class variable int New_space :: X :: i = 23 class New_space :: Y {int a public: int getdata () {cout<< a } // Constructor declaration Y() } // Constructor definition explicitly New_space::Y::Y() { a=0 }

Niet-aaneengesloten naamruimte in C ++

Zoals we weten, kan een naamruimte in C ++ in verschillende delen worden gedefinieerd, dus het bestaat uit de som van de afzonderlijk gedefinieerde delen. Dus als een deel van de naamruimte een naam vereist die in een ander bestand is gedefinieerd, moet die naam nog steeds binnen zijn bereik worden gedeclareerd. Als u de volgende naamruimte op de volgende manier schrijft, wordt een nieuwe naamruimte gedefinieerd of worden nieuwe elementen aan een bestaande toegevoegd:

wat is de beste java ide
namespace namespace_name {// code body}

Geneste naamruimte in C ++

Naamruimten kunnen eenvoudig worden genest en we kunnen als volgt een naamruimte binnen een andere naamruimte definiëren:

namespace namespace_name1 {// code body van namespace_name1 namespace namespace_name2 {// code body geneste naamamespace_name2}}

Hiermee komen we aan het einde van het artikel Namespace in C ++. Ik hoop dat je een idee hebt gekregen van wat precies een naamruimte is in C ++ en wat de verschillende manieren zijn om deze te definiëren. Als je meer wilt weten, bekijk dan de door Edureka, een vertrouwd online leerbedrijf. Edureka's Java J2EE- en SOA-trainings- en certificeringscursus is ontworpen om u te trainen in zowel kern- als geavanceerde Java-concepten, samen met verschillende Java-frameworks zoals Hibernate & Spring.

Heeft u een vraag voor ons? Vermeld het in het opmerkingengedeelte van deze blog en we nemen zo snel mogelijk contact met je op.