Fonction de membre statique dans C++ (Exemples)

Qu'est-ce qu'une fonction statique dans C++?

In C++ classes, un membre statique est un membre de classe qui appartient à la classe plutôt qu'à ses objets. Vous n'aurez qu'un seul exemplaire de l'adhésion. C'est le cas quel que soit le nombre d'objets que vous créez.

Lorsqu'une fonction de classe est définie comme statique, tous les objets de classe partagent un membre de classe statique. La fonction statique est donc accessible sans créer d'objets de classe et devient indépendante de objets de classe. Une donnée membre statique dans C++ peut accéder à d'autres fonctions statiques, en dehors de la classe uniquement.

Pourquoi utiliser les fonctions statiques ?

Contrairement à C++ fonctions globales, les fonctions statiques ne sont accessibles que depuis le fichier de déclaration. S'il est nécessaire de restreindre l'accès à une fonction, rendez-la statique.

Utilisez une fonction statique pour restreindre la réutilisation du même nom de fonction dans un autre fichier.

Définir des fonctions statiques dans C++

syntaxe:

static int myfunc(void)
{
    cout("Example of C++ static function ");
}

Dans l'exemple ci-dessus, nous définissons une fonction statique nommée myfunc. Notez l'utilisation du mot-clé static dans la définition. Le mot-clé vient avant le nom de la fonction.

Fonction de membre statique dans C++

Lorsqu'un membre d'une fonction est déclaré statique, il devient indépendant des autres objets de la classe. Vous pouvez appeler une fonction membre statique même si aucun autre objet de classe n'existe.

Pour accéder aux noms de classe, vous devez utiliser le nom de la classe et l'opérateur de résolution de portée (::). Une fonction statique ne peut accéder qu'à d'autres fonctions statiques, aux données membres statiques et à d'autres fonctions en dehors de la classe. La portée des fonctions membres statiques réside dans la classe et elles ne peuvent pas accéder à ce pointeur de classe.

Exemple 1

#include<iostream>
using namespace std;
class BoxClass {
public:
	static int count;
	BoxClass(double l = 2.0, double b = 2.0, double h = 2.0) {
		cout << "Class constructor called." << endl;
		length = l;
		breadth = b;
		height = h;
		count++;
	}
	double getVolume() {
		return length * breadth * height;
	}
	static int getCount() {
		return count;
	}
private:
	double length;     
	double breadth;    
	double height;     
};
int BoxClass::count = 0;
int main(void) {
	cout << "Inital value of count is : " << BoxClass::getCount() << endl;
	BoxClass Box1(3.2, 1.4, 1.8);    
	BoxClass Box2(7.5, 4.0, 4.0);   
	cout << "Final value of count is : " << BoxClass::getCount() << endl;
	return 0;
}

Sortie :

Fonction membre statique

Voici une capture d'écran du code :

Fonction membre statique

Explication du code :

  1. Inclure le fichier d'en-tête iostream dans notre C++ programme pour utiliser son fonctions.
  2. Incluez l'espace de noms std dans le code pour utiliser ses classes sans l'appeler.
  3. Créez une classe nommée BoxClasse.
  4. Utilisez le modificateur d'accès public pour marquer un membre de la classe qui est accessible publiquement.
  5. Déclarez un membre de classe statique nommé count.
  6. Utilisez un constructeur de classe pour initialiser trois variables d'un type double.
  7. Imprimez du texte sur la console. La fonction endl (fin de ligne) déplace le curseur de la souris sur la ligne suivante.
  8. Initialisez la valeur de l à une longueur variable.
  9. Initialisez la valeur de b à largeur variable.
  10. Initialisez la valeur de h à hauteur variable.
  11. Augmentez ensuite la valeur de la variable count de 1 à chaque fois qu'un nouvel objet est créé.
  12. Fin du corps constructeur.
  13. Créez une fonction nommée doublevolume().
  14. Définissez ce que la fonction doubleVolume() retournera. Il doit renvoyer la multiplication des variables de longueur, de largeur et de hauteur.
  15. Fin du corps de la fonction doubleVolume().
  16. Déclarez une fonction statique nommée getCount().
  17. La fonction getCount() doit renvoyer la valeur de la variable count.
  18. Fin du corps de la fonction getCount().
  19. Utilisez le modificateur d'accès privé pour marquer un membre de la classe comme accessible publiquement.
  20. Déclaration d'un membre de classe nommé length d'un type de données double. Il sera accessible en privé.
  21. Déclarez un autre membre de classe nommé largeur d'un type de données double. Il sera accessible en privé.
  22. Déclaration d'un membre de classe nommé hauteur de type de données double. Il sera accessible en privé.
  23. Fin du corps du BoxClasse de classe.
  24. Initialisez ensuite un membre statique du BoxClasse de classe.
  25. Appel de la fonction main(). Le C++ la logique du programme doit être ajoutée dans le corps de cette fonction.
  26. Imprimez du texte sur la console indiquant le nombre actuel d'objets avant la création de nouveaux objets.
  27. Déclarez un objet nommé Box1, qui est l'une des instances de la classe BoxClasse. Les valeurs de largeur, de longueur et de hauteur doivent être spécifiées entre parenthèses.
  28. Déclarez un objet nommé Box2, qui est une instance de la classe BoxClasse. Les valeurs de largeur, de longueur et de hauteur ont été spécifiées entre parenthèses.
  29. Imprimez un texte sur la console indiquant le nombre actuel d'objets après la création de nouveaux objets.
  30. Les C++ Programme doit renvoyer de la valeur une fois terminé avec succès.
  31. Fin du corps de la fonction main().

Accéder aux fonctions statiques

Vous n'avez pas besoin de créer un objet de classe pour accéder à une fonction statique. Au lieu de cela, vous pouvez utiliser le nom de classe et l'opérateur de résolution de portée (::).

syntaxe:

className::funcName

Ci-dessus, className est le nom de la classe dans laquelle la fonction statique a été définie. Le funcName est le nom attribué à la fonction statique.

Exemple 2

#include<iostream> 
using namespace std;
class MyClass {
public:
	static void msgFunc() {
		cout << "Welcome to Guru99!";
	}
};
int main() {
	MyClass::msgFunc();
}

Sortie :

Accéder aux fonctions statiques

Voici une capture d'écran du code :

Accéder aux fonctions statiques

Explication du code :

  1. Inclure le fichier d'en-tête iostream dans notre programme pour utiliser ses fonctions.
  2. Incluez l'espace de noms std dans votre code pour utiliser ses classes sans l'appeler.
  3. Créez une classe nommée MyClass.
  4. Utilisez le modificateur d'accès public pour marquer un membre de la classe comme accessible publiquement.
  5. Déclaration d'une fonction statique nommée msgFunc(). Le mot clé static rend la fonction statique.
  6. Spécifiez le texte à imprimer sur la console une fois que la fonction ci-dessus est appelée/invoquée.
  7. Fin du corps de la fonction msgFunc().
  8. Mettez fin au corps de classe.
  9. Appel de la fonction main().
  10. Appelez la fonction statique nommée msgFunc().
  11. Fin du corps de la fonction main().

Accéder aux variables statiques

Les variables statiques appartiennent à une classe plutôt qu'à des objets de classe. Si une variable statique est publique, elle est accessible à l'aide du nom de classe et à l'aide de l'opérateur de résolution de portée. Cependant, cela n'est pas possible si un membre statique est privé.

Normalement, les variables privées sont accessibles à l'aide de fonctions publiques. Cependant, une instance/un objet de classe doit être créé. La solution consiste à utiliser une fonction statique.

Exemple 3 : Variable statique dans C++ classe

#include<iostream> 
using namespace std;
class AClass {
private:
	static int myvar;
public:
	static int getVar() { 
		return myvar; 
		} 
};
int AClass::myvar = 23; 
int main() {
	cout <<"The value of myvar is: "<< AClass::getVar() << '\n';
}

Sortie :

Accéder aux variables statiques

Voici une capture d'écran du code :

Accéder aux variables statiques

Explication du code :

  1. Y compris le fichier d'en-tête iostream dans notre programme.
  2. Incluez l'espace de noms std dans ce programme pour utiliser ses classes sans appeler.
  3. Créez une classe nommée AClass.
  4. Utilisez le modificateur d'accès privé pour rendre la variable myvar accessible en privé.
  5. Créez une variable entière statique nommée myvar.
  6. Utilisez le modificateur d'accès public qui marque la fonction getVar() comme accessible publiquement.
  7. Création d'une fonction statique nommée getVar().
  8. La fonction getVar() devrait pouvoir renvoyer la valeur de la variable myvar.
  9. Fin du corps de la fonction getVar().
  10. Fin du corps de la classe AClass.
  11. Attribuez à la variable myvar une valeur de 23. Nous avons utilisé pour cela le nom de classe et l'opérateur de résolution de portée.
  12. Appel de la fonction main().
  13. Imprimez la valeur de la variable myVar sur la console à côté d'un autre texte. Nous avons utilisé le nom de la classe, la fonction statique et l'opérateur de résolution de portée pour accéder à la valeur de cette variable.
  14. La fin du corps de la fonction main().

ce pointeur dans les fonctions statiques

Une fonction statique n'est pas attachée à un objet. C'est pourquoi les fonctions statiques n'ont pas ce pointeur. Le pointeur d'un objet pointe généralement vers l'objet sur lequel il travaille actuellement. Étant donné que les fonctions statiques ne fonctionnent pas avec les objets, ce pointeur n’est pas nécessaire.

Les fonctions statiques ont un accès direct aux autres membres statiques. Cependant, ce n'est pas le cas des membres non statiques. La raison en est que les membres non statiques doivent appartenir à un objet, mais les fonctions statiques n'ont pas d'objets avec lesquels travailler.

Exemple 4

Il est possible de définir une fonction statique en dehors de la déclaration de classe. Démontrons ceci :

#include<iostream> 
using namespace std;
class NumGenerator {
private:
	static int nextNum; 
public:
	static int getNextNum();
};
int NumGenerator::nextNum = 1;
int NumGenerator::getNextNum() {
	return nextNum++; 
}
int main() {
	for (int count = 0; count < 5; ++count)
		std::cout << "The next number is: " << NumGenerator::getNextNum() << '\n';
	return 0;
}

Sortie :

ce pointeur dans les fonctions statiques

Voici une capture d'écran de votre code :

ce pointeur dans les fonctions statiques

Explication du code :

  1. Inclure le fichier d'en-tête iostream dans notre code pour utiliser ses fonctions.
  2. Incluez l'espace de noms std dans notre code pour utiliser ses classes sans l'appeler.
  3. Créez une classe nommée NumGenerator.
  4. En utilisant le modificateur d'accès privé pour marquer la variable, nous sommes sur le point de la créer comme accessible en privé.
  5. Créez une variable entière statique nommée nextNum.
  6. Utilisation du modificateur d'accès public qui vous aide à marquer la variable que nous sommes sur le point de créer comme accessible publiquement.
  7. Déclaration d'une fonction statique nommée getNextNum().
  8. Fin du corps de classe.
  9. Attribuez à la variable nextNum la valeur 1. Nous l'avons fait en utilisant le nom de la classe, le nom de la variable et l'opérateur de résolution de portée.
  10. Définition de la fonction statique getNextNum() en dehors de la classe.
  11. Spécifiez l'action à entreprendre lorsque la fonction ci-dessus est appelée/invoquée. Cela incrémentera la valeur de la variable nextNum de 1.
  12. Fin de définition de la fonction getNextNum().
  13. Appel de la fonction main(). Le C++ la logique du programme doit être ajoutée dans le corps de cette fonction.
  14. Utiliser un pour la boucle pour créer une variable nommée count. La valeur de cette variable doit passer de 0 à 4. Après chaque itération, la valeur de la variable augmentera de 1.
  15. Impression de la valeur de la variable nextNum avec un autre texte sur la console à chaque itération. La valeur est accessible à l'aide de la fonction getNextNum().
  16. Le présent C++ le programme doit renvoyer de la valeur une fois terminé avec succès.
  17. Fin de la fonction main().

Résumé

  • C++ les membres statiques sont des membres de classe qui appartiennent à la classe plutôt qu'à ses objets.
  • Vous n'aurez qu'une seule copie d'un membre statique quel que soit le nombre d'objets que vous créez.
  • Tous les objets de classe partagent chaque membre de classe statique.
  • Après avoir défini une fonction de classe comme statique, elle devient indépendante des objets de classe.
  • Une fonction statique est accessible même si vous ne créez aucun objet de classe.
  • Cependant, les fonctions statiques n'ont pas cet objet, qui pointe vers des objets de classe.