Partager via


Fonctions membres statiques

Les fonctions membres statiques sont considérées comme ayant la classe comme portée. Contrairement aux fonctions membres non statiques, ces fonctions n'ont aucun argument this implicite ; par conséquent, elles ne peuvent utiliser que des données membres statiques, des énumérateurs ou des types imbriqués directement. Les fonctions membres statiques sont accessibles sans utiliser d'objet du type de classe correspondant. Considérez cet exemple :

Exemple

// static_member_functions.cpp
#include <stdio.h>

class StaticTest
{
private:
    static int x;
public:
    static int count()
    {
        return x;
    }
};

int StaticTest::x = 9;

int main()
{
    printf_s("%d\n", StaticTest::count());  // 9
}

Commentaires

Dans le code précédent, la classe StaticTest contient la fonction membre statique count. Cette fonction retourne la valeur du membre de classe privé mais n'est pas nécessairement associée à un objet donné de type StaticTest.

Les fonctions membres statiques ont une liaison externe. Ces fonctions n'ont pas de pointeurs this. Par conséquent, les restrictions suivantes s'appliquent à ces fonctions :

  • Elles ne peuvent pas accéder aux données de membres de classes non statiques à l'aide des opérateurs de sélection de membre (. ou –>).

  • Elles ne peuvent pas être déclarées comme virtual.

  • Elles ne peuvent pas avoir le même nom qu'une fonction non statique qui a les mêmes types d'arguments.

    Notes

    Le côté gauche d'un opérateur de sélection de membres (. ou –>) qui sélectionne une fonction membre statique n'est pas évalué.Cela peut être important si la fonction est utilisée pour ses effets secondaires.Par exemple, l'expression SideEffects().CountOf() n'appelle pas la fonction SideEffects.

Voir aussi

Référence

Pointeur this