•
Classe de armazenamento
e Regras de escopo
Váriaveis
podem conter várias classes de armazenamento.
Que são:
auto, register,
extern, mutable, static.
Esses tipos de
classes de armazenamento servem para se criar variaveis globais e usa-las apropriadamente.
Cada tipo tem sua função definida.
Variáveis
to tipo auto, são usadas somente no corpo de uma
função
auto
int cout = 1;
Variáveis locais static conservam seus valores
quando a funcao é encerrada:
static
int cout = 1;
De todas a mais
importante para estudarmos é a static. Pelos tutoriais veremos vários
programas com classes de armazenamento e aos poucos vamos nos acostumando a usa-los
Exemplo usando uma regra de escopo:
#include <iostream>
using std::cout;
using std::endl;
//
variavel global
int numero = 10;
int funcao1 ( void
); //prototipo de funcao sem parametros
int main()
{
int numero = 20; // variavel local de
main
cout << "A variavel local de main e "
<< numero
<< endl;
//
abrindo novo escopo
{
int numero = 30; //
variavel interna de main
cout << "A variavel interna e diferente
da local: "
<<
numero
<<
endl;
}
cout << "As variaveis de main sao diferentes das
variaveis globais, "
<< "Porem tem
o mesmo nome"
<< endl;
cout
<< "Variavel global: "
<< funcao1()
<< endl;
std::cin;
return
0;
}
int funcao1 ()
{
return
numero; // como nao foi iniciado uma variavel local, usa
a global
}
Teste este
programa e observe o resultado.
Exemplo
complexo usando escopo, static e global:
//
exemplo com static
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
void a ( void );
void b ( void );
void c ( void );
int x = 1;
// variavel global
int main()
{
int x = 5; // variavel local
cout
<< " x local eh " << x << endl;
{
int x = 9; // variavel
escopo
cout
<< " x no escopo INTERNO de main " << x << endl;
}
cout
<< " x local continua " << x << endl;
a();
// a tem x local automatico
b(); // b tem x local estatico
c(); // c usa x global
a(); // a reinicializa x local automatico
b(); // x local estatico conserva seu
valor anterior
c(); // x global tambem conserva seu valor
cout
<< " x local em main eh " << x << endl;
return
0;
}
void a ( void )
{
int x = 25; // inicializa sempre que chama
a funcao
cout
<< endl << " x local em a eh " << x;
++
x;
cout
<< " x local em a eh "<< x << " antes de sair
" << endl;
}
void b ( void )
{
static int x = 50; // somente inicializa
estatica na primeira vez
cout
<< endl << "x local estatico em b e " << x;
++x;
cout
<< "x local estatico eh " << x << " e ao sair
"<< x << endl;
}
void c ( void )
{
cout << endl << "x global eh " <<
x << endl;
x *= 10;
cout
<< "x global eh " << x << " ao sair de c "
<< endl;
}
Leia atentamente,
modifique, verifique e aprenda!
Perguntas???
Email
|