Alcance de las variables en C++

En general, el alcance se define como la medida en que se puede trabajar con algo. En programación, el alcance de una variable también se define como la extensión del código del programa dentro del cual se puede acceder, declarar o trabajar con la variable. Hay principalmente dos tipos de ámbitos variables: 

  1. Variables locales
  2. Variables globales

Variable scope in C++

Ahora entendamos cada uno de los alcances con mayor detalle: 
 

Variables locales

Se dice que las variables definidas dentro de una función o bloque son locales para esas funciones.  

  • Cualquier cosa entre ‘{‘ y ‘}’ se dice dentro de un bloque.
  • Las variables locales no existen fuera del bloque en el que se declaran, es decir, no se puede acceder a ellas ni utilizarlas fuera de ese bloque.
  • Declaración de variables locales : las variables locales se declaran dentro de un bloque.

C++

// CPP program to illustrate
// usage of local variables
#include<iostream>
using namespace std;
 
void func()
{  
    // this variable is local to the
    // function func() and cannot be
    // accessed outside this function
    int age=18;   
}
 
int main()
{
    cout<<"Age is: "<<age;
     
    return 0;
}

Producción: 

Error: age was not declared in this scope

El programa anterior muestra un error que dice «la edad no se declaró en este ámbito». La variable edad se declaró dentro de la función func(), por lo que es local para esa función y no visible para una parte del programa fuera de esta función. 

Programa rectificado : para corregir el error anterior, solo tenemos que mostrar el valor de la variable edad desde la función func(). Esto se muestra en el siguiente programa: 

C++

// CPP program to illustrate
// usage of local variables
#include<iostream>
using namespace std;
 
void func()
{  
    // this variable is local to the
    // function func() and cannot be
    // accessed outside this function
    int age=18;
    cout<<age;
}
 
int main()
{
    cout<<"Age is: ";
    func();
     
    return 0;
}

Producción: 

Age is: 18

Variables globales

Como sugiere el nombre, se puede acceder a las variables globales desde cualquier parte del programa.

  • Están disponibles durante todo el tiempo de vida de un programa.
  • Se declaran en la parte superior del programa fuera de todas las funciones o bloques.
  • Declaración de variables globales : las variables globales generalmente se declaran fuera de todas las funciones y bloques, en la parte superior del programa. Se puede acceder a ellos desde cualquier parte del programa.

C++

// CPP program to illustrate
// usage of global variables
#include<iostream>
using namespace std;
 
// global variable
int global = 5;
 
// global variable accessed from
// within a function
void display()
{
    cout<<global<<endl;
}
 
// main function
int main()
{
    display();
     
    // changing value of global
    // variable from main function
    global = 10;
    display();
}

Producción: 

5
10

En el programa, la variable «global» se declara en la parte superior del programa, fuera de todas las funciones, por lo que es una variable global y se puede acceder a ella o actualizarla desde cualquier parte del programa.  

¿Qué pasa si existe una variable local con el mismo nombre que la variable global dentro de una función?

Repitamos la pregunta una vez más. La pregunta es: si hay una variable dentro de una función con el mismo nombre que una variable global y si la función intenta acceder a la variable con ese nombre, ¿a qué variable se le dará prioridad? ¿Variable local o variable global? Mire el siguiente programa para entender la pregunta:  

C++

// CPP program to illustrate
// scope of local variables
// and global variables together
#include<iostream>
using namespace std;
 
// global variable
int global = 5;
 
// main function
int main()
{  
    // local variable with same
    // name as that of global variable
     
    int global = 2;
    cout << global << endl;
}

Mira el programa anterior. La variable «global» declarada en la parte superior es global y almacena el valor 5, mientras que la declarada dentro de la función principal es local y almacena un valor 2. Entonces, la pregunta es cuándo el valor almacenado en la variable llamada «global» se imprime desde la función principal, entonces, ¿cuál será la salida? 2 o 5?

  • Por lo general, cuando se definen dos variables con el mismo nombre, el compilador produce un error de tiempo de compilación. Pero si las variables se definen en diferentes ámbitos, el compilador lo permite.
  • Siempre que haya una variable local definida con el mismo nombre que una variable global, el compilador dará prioridad a la variable local.

¿Cómo acceder a una variable global cuando hay una variable local con el mismo nombre?

¿Qué pasa si queremos hacer lo contrario de la tarea anterior? ¿Qué pasa si queremos acceder a la variable global cuando hay una variable local con el mismo nombre? 
Para resolver este problema necesitaremos usar el operador de resolución de alcance . El siguiente programa explica cómo hacer esto con la ayuda del operador de resolución de alcance. 

C++

// C++ program to show that we can access a global
// variable using scope resolution operator :: when 
// there is a local variable with same name
#include<iostream>
using namespace std;
  
// Global x 
int x = 0; 
   
int main()
{
  // Local x   
  int x = 10;
  cout << "Value of global x is " << ::x;
  cout<< "\nValue of local x is " << x; 
  return 0;
}

Producción: 

Value of global x is 0
Value of local x is 10

Este artículo es una contribución de Harsh Agarwal . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *