Ir ao conteúdo

Posts recomendados

Postado

Namespaces em C++

À medida que o tempo passa, surgem novas classes, novas funções. Quando

vamos desenvolver nossas classes / funções, nos preocupamos com o fato

do nome ser igual

ao nome de uma função / classe de uma biblioteca que poderemos usar um

dia. Para

resolver o problema de nomes iguais, podemos usar prefixos nos nomes de

nossas funções, como mat_soma, ou então, podemos também fazer aqueles

nomes ridículos nas funções, como funcao_para_somar_dois_numeros(), o

que nem é bom comentar muito.

Mas também, podemos resolver este problema de uma maneira mais fácil,

usando os namespaces, veja um exemplo:


#include <iostream>
//chamamos um namespace para uso
using namespace std;
//declaração de namespace
namespace matematica
{ //início de namespace
int soma ( int a, int b )
{
return a + b;
}
int subtrai ( int a, int b )
{
return a - b;
}
} //fim de namespace
void main ( void )
{
//chamamos a função soma dentro do namespace matematica
int somadn = matematica :: soma ( 2 , 4 ) ;
//chamamos a função subtrai dentro do namespace matematica
int subtraidn = matematica :: subtrai ( 4 , 2 ) ;
//imprime resultados obtidos
cout <<somadn <<endl <<subtraidn <<endl;
}

para ficar mais clara essa explicação, faremos dois arquivos cabeçalho,

os dois arquivos, conterão duas funções identicas, mas, serão identicas

mesmo, em tipo de retorno, nome da função, e tipos de parâmetros e nomes

dos parâmetros, para não ter a desculpa que é "sobrecarga de função"

a diferença dessas funções, é que elas estão declaradas em namespaces

diferentes, em arquivos diferentes.

veja:

m1.h


namespace m1
{
int multiplica ( int a, int b )
{
return a * b;
}
}

m2.h


namespace m2
{
int multiplica ( int a, int b )
{
return a * b;
}
}

usa.cpp


#include <iostream>
#include "m1.h"
#include "m2.h"
void main ( void )
{
int multi1 = m1 :: multiplica ( 2 , 4 ) ;
int multi2 = m2 :: multiplica ( 85 , 12 ) ;
}

Como vimos, os namespaces facilitam muito a nossa vida...

namespaces também podem ficar aninhados, chamando como:

namespace1::namespace2::funcaonamespace2().


#include <iostream>
using namespace std;
namespace n1
{ //início namespace1
void msg1 ( void )
{
cout << "msg do namespace1" ;
} //fim função msg1
namespace n2
{ //início namespace 2 dentro de namespace 1
void msg2 ( void )
{
cout << "msg do namespace 2" ;
} //fim de função
} //fim de namespace 2
} //fim de namespace 1
void main ( void )
{
n1 :: msg1 ( ) ;
cout <<endl;
n1 :: n2 :: msg2 ( ) ;
}

Outra sintaxe com namespaces

Vimos em vários exemplos, a linha:


using namespace std;

isso serve para associar o nível de aninhamento presente em certo

namespace para que os objetos e funções desse namespace possam ser

acessíveis diretamente como se estivessem definidos no escopo atual.

Neste caso, associamos o namespace std, que tem funções como cout, sin,

entre outras.

se não empregássemos essa diretiva em nosso código, faríamos:


std::cout
std::endl
std::cin

etc.

Simplificando tudo, esta diretiva evita de chamarmos

nomedonamespace::função / variável / constante.

veja o exemplo:


#include <iostream>
using namespace std;
namespace josiel
{
int idade=14;
string eugostode="mulher, programacao";
}
using namespace josiel;
void main(void)
{
cout << "minha idade e " << idade << endl;
cout << "eu gosto de " << eugostode << endl;
}

saída do programa acima:

minha idade é 14

eu gosto de mulher, programacao

Repare que no exemplo acima, acessamos as variáveis idade e eugostode

sem ter que precedê-la com qualquer operador de escopo.

Vale lembrar, que a diretiva using seguida pela palavra namespace, só

tem validade no bloco em que foi declarada, por isso, é sempre bom

deixá-la no escopo global.

Fim

Este foi um tutorial bem simples que abordou, de forma direta e com

linguagem fácil, o uso de namespaces em C++.

Eu sei que não explico muito bem, não tenho muita didática, mas, acho (e

espero) que tenha dado pra entender algo do que eu quis passar.

Autor: Josiel A. Santos

E-mail para críticas, sugestões, agradecimento, etc: [email protected]

  • Obrigado 1
  • 7 anos depois...
  • 2 anos depois...
Postado

Até entendi o propósito do namespace, mas o uso de classe e objetos já não dariam jeito nisso?

Tipo:

ClassedoJoaquimDaPadaria o;

o.cout << "esse é o meu cout, só meu e melhorado";

Mesmo assim, o material ficou muito prático e fácil de entender.
Poderia fazer um falando de funções que terminam com [] , coisa mais doida sô

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!