logo

espaço para nome em C++ | Conjunto 2 (ampliação de namespace e namespace sem nome)

Introduzimos namespaces no conjunto 1 abaixo.
Espaço para nome em C++ | Conjunto 1 (Introdução)

Definindo um Namespace:



Uma definição de namespace começa com a palavra-chave namespace seguida pelo nome do namespace como segue:

namespace  namespace_name 
{
// declarações de código, ou seja, variável  (int a;)
método (void add();)
turmas (turma aluno{};)
}

10 de 40

Deve-se observar que não há ponto e vírgula (;) após a chave de fechamento.
Para chamar a versão habilitada para namespace de qualquer função ou variável, acrescente o nome do namespace da seguinte maneira:
nome_do_espaço_de_nome::código;  // o código pode ser uma função variável ou classe.



A diretiva using:

Você também pode evitar a adição de namespaces com a diretiva using namespace. Esta diretiva informa ao compilador que o código subsequente está fazendo uso de nomes no namespace especificado. 
O namespace está, portanto, implícito no seguinte código:

C++
#include    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; } 

Os nomes introduzidos em uma diretiva using obedecem às regras normais de escopo. O nome é visível desde o ponto da diretiva using até o final do escopo em que a diretiva se encontra. Entidades com o mesmo nome definido em um escopo externo ficam ocultas.



uma matriz de objetos java

Namespaces aninhados:

Os namespaces podem ser aninhados onde você pode definir um namespace dentro de outro namespace da seguinte maneira:

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

Você pode acessar membros do namespace aninhado usando operadores de resolução da seguinte maneira:
// para acessar membros do namespace_name2
usando o namespace namespace_name1::namespace_name2;
// para acessar membros do namespace:name1
usando o namespace namespace_name1;


Nas instruções acima, se você estiver usando namespace_name1, os elementos de namespace_name2 serão disponibilizados no escopo da seguinte forma:

filho nigam
C++
#include    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; } 


Também é possível criar mais de um namespace no espaço global. Isso pode ser feito de duas maneiras. 
 

    namespaces com nomes diferentes 
     
CPP
// A C++ program to show more than one namespaces  // with different names. #include    using namespace std; // first name space namespace first {  int func() { return 5; } } // second name space namespace second {  int func() { return 10; } } int main() {  // member function of namespace  // accessed using scope resolution operator  cout &lt;&lt; first::func() &lt;&lt;&quot;n&quot;;   cout &lt;&lt; second::func() &lt;&lt;&quot;n&quot;;   return 0; } 

  • Saída: 
     
5 10
    Estendendo namespaces (usando o mesmo nome duas vezes) 
    Também é possível criar dois blocos de namespace com o mesmo nome. O segundo bloco de namespace nada mais é do que a continuação do primeiro namespace. Em palavras mais simples, podemos dizer que ambos os namespaces não são diferentes, mas na verdade são iguais e estão sendo definidos em partes. 
     
CPP
// C++ program to demonstrate namespace extension #include    using namespace std; // first name space namespace first  {   int val1 = 500;  } // rest part of the first namespace namespace first  {   int val2 = 501;  } int main() {  cout &lt;&lt; first::val1 &lt;&lt;&quot;n&quot;;   cout &lt;&lt; first::val2 &lt;&lt;&quot;n&quot;;   return 0; } 

  • Saída: 
     
500 501


Namespaces sem nome  
 

contém python
  • Eles podem ser usados ​​diretamente no mesmo programa e são usados ​​para declarar identificadores exclusivos.
  • Em namespaces não nomeados, o nome do namespace não é mencionado na declaração do namespace.
  • O nome do namespace é gerado exclusivamente pelo compilador.
  • Os namespaces sem nome que você criou só estarão acessíveis no arquivo em que você os criou.
  • Namespaces sem nome substituem a declaração estática de variáveis.


 

CPP
// C++ program to demonstrate working of unnamed  // namespaces #include    using namespace std; // unnamed namespace declaration namespace  {  int rel = 300;  } int main() {  cout &lt;&lt; rel &lt;&lt; &quot;n&quot;; // prints 300  return 0; } 

Saída: 
 

300