Disponible la nueva versión "donationware" 7.3 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


4.9.19  Operador de acceso a ámbito

§1  Sinopsis

Además de los que pueden declararse explícitamente con la palabra clave namespace ( 4.1.11), en C++ existen múltiples espacios de nombres. El operador que aquí nos ocupa, debe debe su nombre precisamente a que sirve como puente o camino para acceder a objetos que momentáneamente están fuera de ámbito.

El operador :: de acceso a ámbito o resolución de ámbito, permite referenciar (acceder) a un tipo, objeto, función o enumerador incluso si su identificador está oculto. Por ejemplo, anteponiéndolo a un identificador global, permite acceder al mismo incluso cuando es ocultado por una redeclaración homónima (4.1.11c).

Ejemplo:

int x = 2;              // Variable global
...
void main() {
   int x = 3;           // Variable local
   std::cout << "X = " << x   << std::endl;    // L.5:  x local
   std::cout << "X = " << ::x << std::endl;    // L.6:  x global
}

En el ejemplo anterior, la variable local x oculta momentáneamente a la global del mismo nombre. Sin embargo, como puede verse en L.6, el operador :: antepuesto a la variable señala que no se trata de la versión local, sino la perteneciente al ámbito global.

Al mismo tiempo, los especificadores std:: antepuestos a los objetos cout y endl especifican que tales objetos se encuentran en dicho espacio de nombres std, que pertenece a la Librería Estándar C++.

§2  Sintaxis

Como se deduce del propio ejemplo, desde un punto de vista formal existen dos tipos de operador de acceso a ámbito: unario y binario, que adoptan respectivamente las siguientes sintaxis:

:: <objeto>               // Op. unario

<subespacio> :: <objeto>  // Op. binario

En ambos casos, <objeto> es cualquier objeto, función o enumerador y se refiere a la versión del espacio global. Es el caso del término ::x en L.6 del ejemplo anterior.

Cuando se utiliza como operador binario, <subespacio> es el nombre de un subespacio de nombres diferente del actual; el nombre de una clase; estructura o unión (recuerde que estas entidades constituyen un tipo especial de espacio de nombres).  En estos casos el operador sirve para especificar objetos de espacios de nombres diferentes del actual (4.1.11c).  Ejemplo:

namespace ALPHA {
  ...
  long double LD;
  class C {
    public: int x;
  };
}
 
ALPHA::LD = 1.0;        // Acceso a variable LD


Para acceder a un miembro de clase debe especificarse el nombre de la clase seguido del operador y del miembro [1]. Por ejemplo:

ALPHA::C::x = 1         // Acceso a miembro de C en ALPHA


  Los identificadores precedidos por el operador de resolución de ámbito se denominan identificadores cualificados.

  Inicio.


[1]  Cuando el miembro es el constructor o destructor de la clase, el acceso es ligeramente diferente ( 4.11.2d). Ver también 4.11.2e para una discusión más detallada sobre el acceso a miembros de objetos y de clases.