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;
}