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:
#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 nigamC++
#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.
-
Saída:
-
Saída:
- 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
// 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 << first::func() <<"n"; cout << second::func() <<"n"; return 0; }
5 10
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 << first::val1 <<"n"; cout << first::val2 <<"n"; return 0; }
500 501
Namespaces sem nome
contém python
// C++ program to demonstrate working of unnamed // namespaces #include using namespace std; // unnamed namespace declaration namespace { int rel = 300; } int main() { cout << rel << "n"; // prints 300 return 0; }
Saída:
300