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
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