Fonction statique en C++

Jinku Hu 12 octobre 2023
Fonction statique en C++

Cet article montrera comment utiliser les fonctions membres statiques de la classe en C++.

Utilisez les fonctions membres statiques pour accéder aux variables membres private statiques

Le mot-clé static peut être utilisé en C++ pour déclarer des membres de la classe associée à la classe elle-même plutôt qu’une instance particulière.

Les variables membres statiques sont déclarées à l’intérieur du corps de la classe mais ne peuvent pas être initialisées en même temps, à moins qu’elles ne soient des types intégraux qualifiés constexpr, const ou enum qualifiés const. Ainsi, nous devons initialiser les membres statiques non const en dehors de la définition de classe comme nous le ferions pour toute autre variable globale.

Notez que, même si le membre statique donné a un spécificateur private, il est accessible dans la portée globale en utilisant l’opérateur de résolution de portée de classe car BankAccount::rate est initialisé dans l’extrait de code suivant. Une fois le membre rate initialisé au démarrage du programme, il vit jusqu’à la fin du programme. Si l’utilisateur n’initialise pas explicitement les membres statiques, le compilateur utilisera l’initialiseur par défaut.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

class BankAccount {
 private:
  //    static double rate = 2.2; / Error
  static double rate;
  double amount;

 public:
  explicit BankAccount(double n) : amount(n) {}
  static double getRate() { return rate; }
  static void setNewRate(double n) { rate = n; }
};

double BankAccount::rate = 2.2;

int main() {
  BankAccount m1(2390.32);
  BankAccount m2(1210.51);

  return EXIT_SUCCESS;
}

BankAccount::rate n’est pas stocké dans chaque objet BankAccount. Il n’y a qu’une seule valeur rate associée à la classe BankAccount, et par conséquent, chaque instance accédera à la même valeur à un moment donné. Ce comportement est très utile dans la conception de classes, mais dans ce cas, nous nous concentrerons sur les fonctions membres static.

Ces derniers sont généralement utilisés pour accéder aux variables membres statiques, car les spécificateurs de contrôle d’accès aux membres s’appliquent lorsque les utilisateurs de la classe souhaitent interagir avec elles.

A savoir, si nous voulons récupérer la valeur du rate qui a un spécificateur private, nous devons avoir une fonction membre public correspondante. De plus, nous ne voulons pas accéder à ces membres avec des objets d’appels individuels, car il n’y a qu’une seule valeur pour la classe elle-même.

Ainsi, nous implémentons une fonction nommée getRate, une fonction membre statique et renvoie la valeur de rate. On peut alors accéder à la valeur de rate directement depuis la fonction main sans construire d’objet de type BankAccount. Notez que les fonctions membres statiques n’ont pas this pointeur implicite à leur disposition, et elles ne peuvent pas accéder/modifier les membres non statiques de la classe.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

class BankAccount {
 private:
  static double rate;
  double amount;

 public:
  explicit BankAccount(double n) : amount(n) {}
  static double getRate() { return rate; }
  static void setNewRate(double n) { rate = n; }
};

double BankAccount::rate = 2.2;

int main() {
  cout << BankAccount::getRate() << endl;
  BankAccount::setNewRate(2.4);
  cout << BankAccount::getRate() << endl;

  return EXIT_SUCCESS;
}

Production:

2.2
2.4
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - C++ Static