Fonctions membre static
Les fonctions membre static sont considérées comme se avoires la portée de classe.Contrairement aux fonctions membres non statiques, ces fonctions n'ont pas d'argument implicite de cela ; par conséquent, ils peuvent utiliser uniquement les données membres static, les énumérateurs, ou les types imbriqués directement.Les fonctions membre static sont accessibles sans utiliser un objet du type de classe.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());
}
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 static ont une liaison externe.ces fonctions n'ont pas ce pointeurs.Par conséquent, les restrictions suivantes s'appliquent à de telles fonctions :
Ils ne peuvent pas accéder aux données non statique de membre de classe en utilisant les opérateurs de sélection des membres (. ou - >).
ils ne peuvent pas être déclarés comme virtuel.
Elles ne peuvent pas avoir le même nom qu'une fonction non statique qui a les mêmes types d'argument.
[!REMARQUE]
Le côté gauche d'un opérateur member-selection (. 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.