next up previous
Nächste Seite: Wie sieht eine schon Aufwärts: Visual C++ Vorlesung Vorherige Seite: Was können die Klassen

Einer für alle, alle auf Einen?

Manchmal kann es sinnvoll sein, eine Variable zu haben, die für alle Instanzen einer Klasse nur einmal existiert. Ähnlich wie in C, wo man Variablen innerhalb von Funktionen mithilfe von static deklarieren konnte. Der Sichtbarkeitsbereich war dann zwar auf die Funktion beschränkt, sie verhielten sich jedoch wie globale Variablen, d.h. sie wurden nur einmal initialisiert und behielten über Funktionsaufrufe hinweg ihren Wert.

In C++ können Member-Variablen ein ähnliches Verhalten zeigen.

Deklaration:


class CVector {
private:
  static int    instances;     // instance-counter
  static double epsilon;       // zero-vector tolerance
...
public:
  void GetInstances() const;   // returns instances
  void SetEpsilon(double eps); // sets new tolerance
...
}

Implementierung:


int    CVector::instances=0;
double CVector::epsilon  =1E-15;

void CVector::GetInstances(
) const {
  return(instances);
}

void CVector::SetEpsilon(
  double eps
) {
  epsilon=fabs(eps);
}

Erhöhen wir nun in den Konstruktoren instances, und erniedrigen wir es im Destruktor, so können wir mitzählen, wieviele Objekte CVector z.Z. im Programm definiert sind und z.B. folgendes Programmsegment schreiben:


...
  CVector *v;

  v = new CVector[17];

  cout << (*v).GetInstances() << endl;
...

Im obigen Vektorfeld können wir übrigens die dritte Komponente des sechsten Vektors wie folgt setzen:


  v[5][2]=2.0;




1999-12-13