Partager via


Portée

Les noms C++ peuvent être utilisés uniquement dans certaines zones d'un programme. Cette zone est appelée « portée » du nom. La portée détermine la « durée de vie » d'un nom qui ne désigne pas un objet d'étendue static. La portée détermine également la visibilité d'un nom, lorsque les constructeurs et les destructeurs de classe sont appelés, et lorsque des variables locales à la portée sont initialisées. (Pour plus d'informations, consultez Constructeurs et Destructeurs.) Il existe cinq types de portée :

  • **Portée locale   **Un nom déclaré dans un bloc est uniquement accessible dans ce bloc et dans les blocs qu'il contient, et uniquement après le point de déclaration. Les noms des arguments formels à une fonction dans la portée du bloc le plus à l'extérieur de la fonction ont une portée locale, comme s'ils avaient été déclarés dans le bloc contenant le corps de la fonction. Prenons le fragment de code suivant :

    {
        int i;
    }
    

    La déclaration de i étant dans un bloc entouré par des accolades, i a une portée locale et n'est jamais accessible, car aucun code n'y accède avant l'accolade fermante.

  • **Portée de la fonction   **Les étiquettes sont les seuls noms à avoir une portée de fonction. Elles peuvent être utilisées partout dans une fonction, mais ne sont pas accessibles en dehors de cette fonction.

  • **Portée de fichier   **Tout nom déclaré en dehors de tous les blocs ou de toutes les classes a une portée de fichier. Elle est accessible n'importe où dans l'unité de traduction après sa déclaration. Les noms avec portée de fichier qui ne déclarent pas d'objets statiques sont souvent appelés noms globaux.

    En C++, la portée de fichier est également appelée portée de l'espace de noms.

  • Portée de classe   Les noms des membres de classe ont une portée de classe. Les fonctions membres de classe sont seulement accessibles à l'aide des opérateurs de sélection de membres (. ou –>) ou des opérateurs pointeur vers membre (.* ou –>*) sur un objet ou un pointeur vers un objet de cette classe ; les données de membres de classes non statiques sont considérées locales à l'objet de cette classe. Prenons la déclaration de classe suivante :

    class Point
    {
        int x;
        int y;
    };
    

    Les membres des classes x et y sont considérés comme étant dans la portée de classe Point.

  • **Portée de prototype   **Les noms déclarés dans un prototype de fonction sont visibles uniquement jusqu'à la fin du prototype. Le prototype suivant déclare trois noms (strDestination, numberOfElements et strSource) ; ces noms sont hors de portée à la fin du prototype :

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

Voir aussi

Référence

Concepts de base