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{};)
}
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.
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:
#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 & lt ; & lt ; first :: func () & lt ; & lt ; & quot ; n & quot ;; cout & lt ; & lt ; second :: func () & lt ; & lt ; & quot ; n & quot ;; 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 & lt ; & lt ; first :: val1 & lt ; & lt ; & quot ; n & quot ;; cout & lt ; & lt ; first :: val2 & lt ; & lt ; & quot ; n & quot ;; return 0 ; }
500 501
Namespaces sem nome
// 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
Principais Artigos
Categoria
Artigos Interessantes