[C++] Básico sobre: Namespaces

Nesse artigo tentarei mostrar o básico por trás do Namespace do c++. Como base, usei o artigo sobre namaspaces de Juan Soulie, publicado no site www.cpluscplus.com.

Namespaces nos permitem agrupar um conjunto de classes globais, objetos e/ou funções sob um nome. Em outras palavras, eles servem para dividir o escopo global em sub-escopos conhecidos como namespaces.


O formato de um namespace é o seguinte:

namespace identificador
{
   entidades_do_namespace;
}

Explicando:

  • identificador: É qualquer identificador válido (Um nome).
  • entidades_d0_namespace: É o corpo do namespace. Nele são inseridos os conjuntos de classes, objetos, e funções que fazem parte do namespace.

Exemplificando:

namespace meuNamespace
{
   int a, b;
}

Neste caso, “a” e “b” são variáveis normais do tipo inteiro declaradas dentro namespace meuNamespace. Para obter o acesso a essas variáveis temos que usar o operador de escopo “::“. Veja como fazer isso.

meuNamespace::a;
meuNamespace::b;

A funcionalidade de um namespace é útil em casos onde há uma possibilidade de um objeto global ou funções diferentes que usam o mesmo nome, o que causaria um erro de redefinição sem o uso dos namespaces. Veja o seguinte exemplo:

#include <iostream>
using namespace std;

namespace primeiro
{
   int var = 5;
}

namespace segundo
{
   int var = 3.1416
}

int main()
{
   cout << primeiro::var << endl;
   cout << segundo::var << endl;
return 0;
}

Neste caso obteríamos as seguintes saídas:


5
3.1416

Assim, duas variáveis globais com o nome var existem. Não há erro de redefinição por causa do uso dos namespaces primeiro e segundo.

using namespace

A palavra chave using é usada para introduzir um identificador de um namespace para que possamos usar classes/obejetos/funções como se estivessem em um escopo global. Por exemplo:

// exemplo de "using namespace"
#include <iostream>
namespace primeiro
{
   int var = 5;
}
namespace segundo
{
   double var = 3.1416;
}
int main ()
{
   using namespace segundo;
   cout << var << endl;
   cout << (var*2) << endl;
   return 0;
}

Neste caso nós podemos usar var sem o operador de escopo.

É bom ressaltar que using namespace é válido somente no bloco em que foi declarado (Entenda bloco como tudo que estiver entre chaves {}) ou é válido também em toda parte do código se sua declaração foi feita no escopo global.

Namespace Alias

É possível dar um novo “apelido” para um namespace já existente. Para fazer isso é necessário o seguinte:

namespace novo_nome = namespaceAtual;

Namespace std

No padrão ANSI C++, todas as classes, objetos e funções da biblioteca padrão do C++ estão definidas dentro do namespace std. É por isso que incluímos este namespace em todos os programas que usam algo que faz parte da iostream.

Por enquanto é isso! Em breve mais sobre C++ e outras linguagens.

Fonte [Linha de Código/Cplusplus]

Anúncios
  1. 21 de maio de 2010

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: