Klassenvariable (auch Klassendaten bzw. statische Attribute genannt) und statische Methoden
Eine Klassenvariable bezieht sich auf die Klasse und nicht auf ein Objekt dieser Klasse.
Eine statische Methode (auch Klassenmethode genannt) kann nur auf Klassenvariablen zugreifen, aber nicht auf Attribute (Datenmember) einer Klasse.
Beispiel: Der Kontostand verschiedener Kunden einer Bank ist im Allgemeinen verschieden, aber die Bank kann jedem Kunden den gleichen Zinssatz geben.
Zinssatz: Klassenvariable der Klasse Konto. Kontostand: "gewöhnliche" Variable (Attribut) der Klasse Konto.
Mit einer statischen Methode kann man nur auf den Zinssatz zugreifen.
Umsetzung in C++
Eine Klassenvariable bekommt den Bezeichner static in der Definition der Klasse.
Beispiel in C++
#include using namespace std;
class Konto{ private: static double zinssatz; double kontostand; public: Konto(double geld); ~Konto(); static void setZinssatz( double z); static double getZinssatz(); double berechneZinsen(); }; Deklaration der Klassenvariable Deklaration der statischen Methode Bezeichner static
Implementieren Sie die Methoden.
double Konto::zinssatz; Konto::Konto(double geld){ kontostand = geld; }; Konto::~Konto(){ }; Definition der Klassenvariable, d.h. damit wird Speicher reserviert. Der Bezeichner static darf hier nicht mehr verwendet werden !! Konstrukor (wie üblich) Destrukor (wie üblich)
void Konto::setZinssatz( double z){ zinssatz = z; } double Konto::getZinssatz(){ return(zinssatz); } statische Methode darf nur auf die Klassenvariable zugreifen. Der Bezeichner static darf hier nicht mehr verwendet werden !!
double Konto::berechneZinsen(){ return(kontostand* zinssatz/100); }; eine nicht static-Methode darf auch auf eine Klassenvariable zugreifen.
int main(){ Konto::setZinssatz(50); Konto k1(1000); Konto k2(2000); cout << "Zinsertrag ist: " << k1.berechneZinsen() << endl; cout << "Zinsertrag ist: " << k2.berechneZinsen() << endl; } Zinssatz wird auf 50% festgelegt. Dies gilt für alle Konten !! Da dies für die Klasse gilt, wird auch der Bezeichner Konto verwendet !! Kontostand für Konto k1 initialisieren auf : 1000 Kontostand für Konto k2 initialisieren auf : 2000 Zinsertrag für Konto k1 ist: Kontostand 1000 und 50% = 500 Zinsertrag für Konto k2 ist: Kontostand 2000 und 50% = 1000