Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

Naamruimten in C++

Beschouw een situatie waarin we twee personen hebben met dezelfde naam, Zara, in dezelfde klas. Wanneer we ze zeker moeten onderscheiden, zouden we wat aanvullende informatie naast hun naam moeten gebruiken, zoals het gebied, of ze in een ander gebied wonen of de naam van hun moeder of vader, enz.

Dezelfde situatie kan zich voordoen in uw C++-toepassingen. U schrijft bijvoorbeeld code die een functie heeft met de naam xyz() en er is een andere bibliotheek beschikbaar die ook dezelfde functie xyz() heeft. Nu kan de compiler niet weten naar welke versie van de xyz()-functie je verwijst in je code.

Een naamruimte is ontworpen om deze moeilijkheid te overwinnen en wordt gebruikt als aanvullende informatie om onderscheid te maken tussen vergelijkbare functies, klassen, variabelen enz. met dezelfde naam die beschikbaar zijn in verschillende bibliotheken. Met namespace kunt u de context definiëren waarin namen worden gedefinieerd. In wezen definieert een naamruimte een bereik.

Een naamruimte definiëren

Een naamruimtedefinitie begint met het trefwoord naamruimte gevolgd door de naamruimtenaam als volgt −

namespace namespace_name {
   // code declarations
}

Om de naamruimte-enabled versie van een functie of variabele aan te roepen, plaatst u (::) de naamruimtenaam als volgt −

name::code;  // code could be variable or function.

Laten we eens kijken hoe de naamruimte de entiteiten omvat, inclusief variabele en functies −

Live demo
#include <iostream>
using namespace std;

// first name space
namespace first_space {
   void func() {
      cout << "Inside first_space" << endl;
   }
}

// second name space
namespace second_space {
   void func() {
      cout << "Inside second_space" << endl;
   }
}

int main () {
   // Calls function from first name space.
   first_space::func();
   
   // Calls function from second name space.
   second_space::func(); 

   return 0;
}

Als we bovenstaande code compileren en uitvoeren, zou dit het volgende resultaat opleveren −

Inside first_space
Inside second_space

De gebruiksrichtlijn

U kunt ook voorkomen dat naamruimten voorafgaan met de naamruimte gebruiken richtlijn. Deze instructie vertelt de compiler dat de volgende code gebruikmaakt van namen in de opgegeven naamruimte. De naamruimte wordt dus geïmpliceerd voor de volgende code −

Live demo
#include <iostream>
using namespace std;

// first name space
namespace first_space {
   void func() {
      cout << "Inside first_space" << endl;
   }
}

// second name space
namespace second_space {
   void func() {
      cout << "Inside second_space" << endl;
   }
}

using namespace first_space;
int main () {
   // This calls function from first name space.
   func();
   
   return 0;
}

Als we bovenstaande code compileren en uitvoeren, zou dit het volgende resultaat opleveren −

Inside first_space

De instructie 'using' kan ook worden gebruikt om naar een bepaald item binnen een naamruimte te verwijzen. Als het enige deel van de std-naamruimte dat u wilt gebruiken bijvoorbeeld cout is, kunt u er als volgt naar verwijzen −

using std::cout;

Daaropvolgende code kan verwijzen naar cout zonder de naamruimte vooraf te laten gaan, maar andere items in de std naamruimte moet nog steeds als volgt expliciet zijn −

Live demo
#include <iostream>
using std::cout;

int main () {
   cout << "std::endl is used with std!" << std::endl;
   
   return 0;
}

Als we bovenstaande code compileren en uitvoeren, zou dit het volgende resultaat opleveren −

std::endl is used with std!

Namen geïntroduceerd in een met richtlijn gehoorzamen aan de regels van het normale toepassingsgebied. De naam is zichtbaar vanaf het gebruik richtlijn tot het einde van het toepassingsgebied waarin de richtlijn zich bevindt. Entiteiten met dezelfde naam gedefinieerd in een outer scope zijn verborgen.

Onafhankelijke naamruimten

Een naamruimte kan in verschillende delen worden gedefinieerd en dus bestaat een naamruimte uit de som van de afzonderlijk gedefinieerde delen. De afzonderlijke delen van een naamruimte kunnen over meerdere bestanden worden verdeeld.

Dus als een deel van de naamruimte een naam vereist die in een ander bestand is gedefinieerd, moet die naam nog steeds worden gedeclareerd. Het schrijven van een volgende naamruimtedefinitie definieert ofwel een nieuwe naamruimte of voegt nieuwe elementen toe aan een bestaande −

namespace namespace_name {
   // code declarations
}

Geneste naamruimten

Naamruimten kunnen worden genest waar u een naamruimte als volgt binnen een andere naamruimte kunt definiëren −

namespace namespace_name1 {
   // code declarations
   namespace namespace_name2 {
      // code declarations
   }
}

U kunt als volgt toegang krijgen tot leden van geneste naamruimte door resolutie-operators te gebruiken:−

// to access members of namespace_name2
using namespace namespace_name1::namespace_name2;

// to access members of namespace:name1
using namespace namespace_name1;

Als u in de bovenstaande instructies naamruimtenaam1 gebruikt, worden elementen van naamruimtenaam2 als volgt beschikbaar in het bereik −

Live demo
#include <iostream>
using namespace std;

// first name space
namespace first_space {
   void func() {
      cout << "Inside first_space" << endl;
   }
   
   // second name space
   namespace second_space {
      void func() {
         cout << "Inside second_space" << endl;
      }
   }
}

using namespace first_space::second_space;
int main () {
   // This calls function from second name space.
   func();
   
   return 0;
}

Als we bovenstaande code compileren en uitvoeren, zou dit het volgende resultaat opleveren −

Inside second_space

C Taal

  1. C++-operators
  2. C++ Opmerkingen
  3. C++-klassesjablonen
  4. C++-overzicht
  5. C++-constanten/letters
  6. Operatoren in C++
  7. Getallen in C++
  8. C++-referenties
  9. Naamruimten in C++
  10. C++-sjablonen
  11. C++ Preprocessor