Share via


Ámbito

Los nombres de C++ solo se pueden utilizar en determinadas áreas de un programa. Esta área se denomina "ámbito" del nombre. El ámbito determina la "duración" de un nombre que no denota un objeto de extensión estática. El ámbito también determina la visibilidad de un nombre, cuando se llama a los constructores y destructores de clase, y cuando se inicializan variables locales respecto al ámbito. (Para obtener más información, vea Constructores y Destructores). Hay cinco tipos de ámbito:

  • **Ámbito local   **Un nombre declarado en un bloque solamente es accesible dentro de dicho bloque y los bloques enmarcados por él, y solo después del punto de declaración. Los nombres de argumentos formales a una función en el ámbito del bloque extremo de la función tienen ámbito local, como si se hubieran declarado dentro del bloque que enmarca el cuerpo de la función. Observe el fragmento de código siguiente:

    {
        int i;
    }
    

    Como la declaración de i está en un bloque enmarcado entre llaves, i tiene ámbito local y nunca es accesible porque ningún código tiene acceso a él delante de la llave de cierre.

  • **Ámbito de función   **Las etiquetas son los únicos nombres que tienen ámbito de función. Se pueden utilizar en cualquier parte dentro de una función, pero no son accesibles fuera de dicha función.

  • **Ámbito de archivo   **Un nombre declarado fuera de todos los bloques o clases tiene ámbito de archivo. Es accesible en cualquier parte de la unidad de traducción después de su declaración. Los nombres con ámbito de archivo que no declaran objetos estáticos suelen denominarse nombres globales.

    En C++, el ámbito de archivo también se conoce como ámbito de espacio de nombres.

  • Ámbito de clase   Los nombres de los miembros de clase tienen ámbito de clase. Solo se puede tener acceso a las funciones miembro de clase mediante el uso de los operadores de selección de miembros (. o –>) o los operadores de puntero a miembro (.* o –>*) de un objeto o un puntero a un objeto de esa clase; los datos de miembros de clase no estáticos se consideran locales al objeto de esa clase. Considere la siguiente declaración de clase:

    class Point
    {
        int x;
        int y;
    };
    

    Se considera que los miembros de clase x e y están en el ámbito de clase Point.

  • **Ámbito de prototipo   **Los nombres declarados en un prototipo de función solo son visibles hasta el final del prototipo. El siguiente prototipo declara tres nombres (strDestination, numberOfElements y strSource); estos nombres están fuera de ámbito al final del prototipo:

    errno_t strcpy_s( char *strDestination, size_t numberOfElements, const char *strSource );
    

Vea también

Referencia

Conceptos básicos