C++ Membres statiques de classe

Classes et objets C++

Nous pouvons utiliserstaticLe mot-clé est utilisé pour définir des membres de classe comme statiques. Lorsque nous déclarons un membre de classe comme statique, cela signifie que quel que soit le nombre d'objets de la classe créés, il n'existe qu'une seule copie du membre statique.

Les membres statiques sont partagés entre tous les objets de la classe. Si aucune autre instruction d'initialisation n'existe, toutes les données statiques seront initialisées à zéro lors de la création du premier objet. Nous ne pouvons pas placer l'initialisation des membres statiques à l'intérieur de la définition de classe, mais nous pouvons le faire à l'extérieur de la classe en utilisant l'opérateur de résolution de portée.::Pour redéclarer la variable statique afin de l'initialiser, comme indiqué dans l'exemple suivant.

L'exemple suivant aide à mieux comprendre le concept de données membres statiques :

Exemple

#include <iostream> using namespace std; class Box { public: static int objectCount; // Définition du constructeur Box(double l=2.0, double b=2.0, double h=2.0) { cout <<"Constructeur appelé." << endl; length = l; breadth = b; height = h; // Incrémenter de 1 chaque fois qu'un objet est créé objectCount++; } double Volume() { return length * breadth * height; } private: double length; // Longueur double breadth; // Largeur double height; // Hauteur }; // Initialiser le membre statique de la classe Box int Box::objectCount = 0; int main(void) { Box Box1(3.3, 1.2, 1.5); // Déclarer box1 Box Box2(8.5, 6.0, 2.0); // Déclarer box2 // Afficher le nombre total d'objets cout << "Objets au total : " << Box::objectCount << endl; return 0; }

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :

Constructor called.
Constructor called.
Total objects: 2

Fonctions membres statiques

Si une fonction membre est déclarée comme static, la fonction peut être rendue indépendante de tout objet particulier de la classe. Les fonctions membres statiques peuvent être appelées même lorsqu'aucun objet de classe n'existe,Fonctions statiquesUtilisez simplement le nom de la classe suivi de l'opérateur de résolution de portée::alors nous pouvons y accéder.

Les fonctions membres statiques ne peuvent accéder qu'aux données membres statiques, aux autres fonctions membres statiques et aux autres fonctions extérieures à la classe.

Les fonctions membres statiques ont une portée de classe ; elles ne peuvent pas accéder au pointeur this de la classe. Vous pouvez utiliser des fonctions membres statiques pour déterminer si certains objets de la classe ont été créés.

Différences entre les fonctions membres statiques et les fonctions membres ordinaires :

  • Les fonctions membres statiques n'ont pas de pointeur this et ne peuvent accéder qu'aux membres statiques (y compris les variables membres statiques et les fonctions membres statiques).
  • Les fonctions membres ordinaires ont un pointeur this et peuvent accéder à n'importe quel membre de la classe ; les fonctions membres statiques n'ont pas de pointeur this.

L'exemple suivant aide à mieux comprendre le concept de fonctions membres statiques :

Exemple

#include <iostream> using namespace std; class Box { public: static int objectCount; // Définition du constructeur Box(double l=2.0, double b=2.0, double h=2.0) { cout <<"Constructeur appelé." << endl; length = l; breadth = b; height = h; // Incrémenter de 1 chaque fois qu'un objet est créé objectCount++; } double Volume() { return length * breadth * height; } static int getCount() { return objectCount; } private: double length; // Longueur double breadth; // Largeur double height; // Hauteur }; // Initialiser le membre statique de la classe Box int Box::objectCount = 0; int main(void) { // Afficher le nombre total d'objets avant de créer des objets cout << "Nombre initial d'objets : " << Box::getCount() << endl; Box Box1(3.3, 1.2, 1.5); // Déclarer box1 Box Box2(8.5, 6.0, 2.0); // Déclarer box2 // Afficher le nombre total d'objets après la création d'objets cout << "Nombre final d'objets : " << Box::getCount() << endl; return 0; }

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :

Inital Stage Count: 0
Constructor called.
Constructor called.
Final Stage Count: 2

Classes et objets C++

autres extensions