Ambito de una variable en C++

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 en la entrada