cpp-ambito-variables

Qué es el ámbito de las variables en C++

En C++ el alcance de una variable se refiere a la parte del programa donde la variable es accesible. Las variables pueden tener diferentes alcances dependiendo de dónde se declaren.

Variables locales

Las variables locales se declaran dentro de una función y solo son accesibles dentro de esa función. Su ciclo de vida comienza cuando la función es llamada y termina cuando la función regresa.

#include <iostream>

void miFuncion() {
    int numero = 10; // Variable local, solo existe en esta función
    
    std::cout << numero << std::endl; // ✔️ Aquí puedes usarla
}

int main() {
    miFuncion();
    
    // std::cout << numero << std::endl; // ❌ Esto daría un error, aquí no existe 'numero'
    
    return 0;
}

Variables globales

Las variables globales se declaran fuera de todas las funciones y son accesibles desde cualquier parte del programa después de su declaración. Su ciclo de vida dura toda la ejecución del programa.

#include <iostream>

int numeroGlobal = 20; // Variable global

void miFuncion() {
    std::cout << numeroGlobal << std::endl; // ✔️ Aquí puedes usarla
}

int main() {
    std::cout << numeroGlobal << std::endl; // ✔️ Aquí también puedes usarla
    
    miFuncion();
    
    return 0;
}

Variables de instancia

Las variables de instancia (también conocidas como miembros de datos de una clase). Se declaran dentro de una clase. Cada instancia de la clase tiene su propia copia de estas variables.

#include <iostream>

class Persona {
public:
    std::string nombre; // Variable de instancia
    
    void imprimirNombre() {
        std::cout << nombre << std::endl; // ✔️ Aquí puedes usarla
    }
};

int main() {
    Persona persona;
    persona.nombre = "Luis"; // ✔️ Esto funciona
    persona.imprimirNombre();
    
    return 0;
}

Variables estáticas

Las variables estáticas se declaran con la palabra clave static y pertenecen a la clase en lugar de a una instancia específica. Son accesibles sin crear una instancia de la clase y su ciclo de vida dura toda la ejecución del programa.

#include <iostream>

class Contador {
public:
    static int contadorGlobal; // Variable estática
    
    void incrementarContador() {
        contadorGlobal++; // ✔️ Aquí puedes usarla
    }
};

// Definición de la variable estática fuera de la clase
int Contador::contadorGlobal = 0;

int main() {
    Contador c1, c2;
    
    c1.incrementarContador();
    c2.incrementarContador();
    
    std::cout << Contador::contadorGlobal << std::endl; // ✔️ Esto funciona, imprime: 2
    
    return 0;
}