Statische Funktion in C++

Jinku Hu 12 Oktober 2023
Statische Funktion in C++

In diesem Artikel wird veranschaulicht, wie statische Memberfunktionen der Klasse in C++ verwendet werden.

Verwenden Sie die statischen Member-Funktionen, um auf private statische Member-Variablen zuzugreifen

Das Schlüsselwort static kann in C++ verwendet werden, um Member der Klasse zu deklarieren, die der Klasse selbst und nicht einer bestimmten Instanz zugeordnet sind.

Statische Member-Variablen werden im Klassenrumpf deklariert, können aber nicht gleichzeitig initialisiert werden, es sei denn, sie sind constexpr-qualifiziert, const-qualifizierte ganzzahlige Typen oder const-qualifizierte enum. Wir müssen also nicht-konstante statische Member außerhalb der Klassendefinition initialisieren wie jede andere globale Variable.

Beachten Sie, dass der angegebene statische Member auch dann, wenn er einen private-Spezifizierer hat, im globalen Bereich mit dem Klassenbereichsauflösungsoperator zugegriffen werden kann, da BankAccount::rate im folgenden Codeausschnitt initialisiert wird. Sobald das Mitglied rate beim Programmstart initialisiert wurde, lebt es bis zum Ende des Programms. Wenn der Benutzer statische Member nicht explizit initialisiert, verwendet der Compiler den Standardinitialisierer.

#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 wird nicht in jedem BankAccount-Objekt gespeichert. Der Klasse BankAccount ist nur ein rate-Wert zugeordnet, und folglich greift jede Instanz im gegebenen Moment auf denselben Wert zu. Dieses Verhalten ist beim Klassendesign sehr nützlich, aber in diesem Fall konzentrieren wir uns auf die statischen Memberfunktionen.

Letztere werden normalerweise verwendet, um auf statische Member-Variablen zuzugreifen, da Member-Zugriffssteuerungsspezifizierer gelten, wenn die Benutzer der Klasse mit ihnen interagieren möchten.

Wenn wir nämlich den Wert von rate abrufen möchten, der einen private Spezifizierer hat, benötigen wir eine entsprechende public Member-Funktion. Außerdem möchten wir nicht mit einzelnen Aufrufobjekten auf diese Member zugreifen, da es nur einen Wert für die Klasse selbst gibt.

Also implementieren wir eine Funktion namens getRate, eine statische Member-Funktion und gibt den Wert von rate zurück. Dann können wir direkt von der Funktion main auf den Wert von rate zugreifen, ohne ein Objekt vom Typ BankAccount zu konstruieren. Beachten Sie, dass statische Memberfunktionen keinen diesen impliziten Zeiger zur Verfügung haben und sie nicht auf nicht-statische Member der Klasse zugreifen/diese ändern können.

#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;
}

Ausgabe:

2.2
2.4
Autor: 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

Verwandter Artikel - C++ Static