El ámbito, alcance o scope de una variable es la parte del
programa donde la variable es accesible.
Esta definición es también aplicable a constantes y
objetos.
En C++ existen tres tipos de ámbitos:
- Global o de programa
- Local o de función.
- De bloque.
Según su ámbito las variables se clasifican en variables globales, variables
locales y variables de bloque.
1. Variables globales.
Son variables declaradas fuera
de cualquier función, normalmente al comienzo del programa.
Las variables globales son accesibles desde su declaración hasta el
final del programa por todas las funciones que lo forman.
Ejemplo de uso de variables globales en C++:
// Ejemplo de variable global
#include <iostream>
using namespace std;
//se declara x como global.
int x = 1;
void funcion();
int main()
{
cout <<
x << endl; // muestra 1
x++;
cout <<
x << endl, // muestra 2
//se llama a una función que accede a
//la variable global x
funcion();
cout << x << endl, // muestra 4
system("pause");
}
void funcion()
{
//la función tiene acceso a la variable global x
x = x * 2;
}
En el
ejemplo se ha declarado la variable x como global. En el momento de la
declaración se asigna memoria y comienza a estar accesible. Tanto main como la
función tienen acceso a la variable x y por tanto pueden modificar su valor.
La
variable global deja de estar accesible cuando acaba la ejecución del programa.
2 Variables locales.
Las variables locales son las que se declaran
dentro de una función. Son accesibles desde el punto donde se declaran hasta el
final del bloque donde se han declarado. Los límites de los
bloques están definidos por las llaves de apertura y cierre { }.
Normalmente el final del bloque coincide con el final de la función. Si el
bloque donde se ha declarado la variable local contiene a su vez otros bloques,
también son accesibles dentro de ellos.
Las
variables locales se destruyen cuando se sale del bloque donde han sido
declaradas.
Los
parámetros formales (los que aparecen en la cabecera de una función) se
consideran variables locales de la función.
Ejemplo de uso de variables
locales:
El
siguiente programa muestra el uso de variables locales. El programa lee 10 números
por teclado y calcula si el número es primo. Para comprobar si el número leído
es primo se utiliza una función que recibe el número y devuelve true o false
según el número sea primo o no.
#include <iostream>
using namespace std;
bool es_primo(int);
int main()
{ int numero, i; // variables locales de main
cout << "Introduzca 10 numeros
enteros > 0: ";
for(i=1;i<=10;i++)
{
do
{
cout <<
"numero " << i << ": ";
cin >> numero;
}while(numero <= 0);
if (es_primo(numero))
cout << "Es primo"
<< endl;
else
cout << "No es
primo" << endl;
}
system("pause");
}
//función que
comprueba si un número es primo
//el parámetro n es una variable local de la función
bool es_primo(int n)
{
int i=2; // i es
una variable local de la función
if(n==1)
return true;
else
{
while(n%i!=0)
i++;
if(i==n)
return true;
else
return false;
}
}
Ocultación de variables
Puede ocurrir que una variable global y
otra local tengan el mismo nombre. Cuando ocurre esto, la variable global queda oculta en el ámbito
de accesibilidad de la local del mismo nombre.
Para acceder a una variable global que ha quedado
oculta por otra local se utiliza el operador de resolución de ámbito ::
Ejemplo de ocultación de variables en C++:
// Ejemplo de ocultación de variables
#include <iostream>
using namespace std;
int a = 10; //variable global
int main()
{
int a = 5; //variable local de main
//oculta la variable global con el
mismo nombre
cout << a
<< endl; //muestra 5
cout << ::a
<< endl; //acceso a la variable global mediante
::
//muestra 10
system("pause");
}
El programa muestra:
5
10
3 Variables de bloque.
Una función puede contener bloques definidos dentro de
otros. Los límites de los bloques están definidos por las llaves de apertura y
cierre { }.
El ámbito de una variable declarada dentro de un bloque comienza
en el punto en que se declara hasta el final del bloque donde se ha declarado (llave
final del bloque).
Una variable de bloque se destruye cuando acaba la
ejecución del bloque donde se ha declarado.
Un ejemplo muy usual de declaración de variables dentro de
un bloque es hacerlo en las instrucciones for:
for(int i = 1; i<=20; i+=2)
{
cout << i << endl;
}
La variable i se ha declarado dentro del for y solo es
accesible dentro de él.
Si a continuación de la llave final del for escribimos:
cout
<< i << endl;
se producirá un error de compilación: la variable i no
existe fuera del for y el compilador nos dirá que no está declarada.
Una variable puede quedar oculta (no accesible) si hay otro bloque anidado y se declara
otra variable con el mismo nombre.
La variable declarada en el bloque interior oculta a la
primera variable y la hace inaccesible en el bloque interior.
No hay comentarios:
Publicar un comentario