Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

18.2 Beispiel II

18.2 Beispiel II

Eine weitere Besonderheit dieser statischen Klassenattribute ist, dass alle Objektinstanzen sich diese teilen. So hat man quasi einen Art globale Klassenvariable. Ein typischer Anwendungsfall wäre z.B., dass man einen Instanzzähler bauen will, welcher festhält, wie viele Objekte der Klasse bereits instantiiert wurden.

Folgendes Beispiel soll dies demonstrieren, wobei ich der Übersicht halber, nicht zwischen Header - und CPP-Datei unterscheide.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
					
// Definition der Klasse //////////////////////////////////////////////////////
class CStatischesMitzaehlen {
	public:
		CStatischesMitzaehlen(void);

	private:
		static unsigned int s_iInstCounter;
		const unsigned int m_iInstanceID;
};

// Initialisieren der Klassenvariable
unsigned int CStatischesMitzaehlen::s_iInstCounter = 0;

// Implementierung des Konstruktors ///////////////////////////////////////////
CStatischesMitzaehlen::CStatischesMitzaehlen()
	: m_iInstanceID(++CStatischesMitzaehlen::s_iInstCounter)
{
	printf("Es wurde die %i. Instanzen der Klasse erzeugt\n", m_iInstanceID);
} // CStatischesMitzaehlen ////////////////////////////////////////////////////



// Hauptfunktion der Anwendung ////////////////////////////////////////////////
int main(int argc, char** argv) {
	CStatischesMitzaehlen oObjekt1;
	CStatischesMitzaehlen oObjekt2;
	CStatischesMitzaehlen oObjekt3;

	printf("\nEs wurden insgesamt %i Instanzen erzeugt", CStatischesMitzaehlen::s_iInstCounter);
	return 0;
} // main /////////////////////////////////////////////////////////////////////
					

Ausgabe:

Es wurde die 1. Instanzen der Klasse erzeugt
Es wurde die 2. Instanzen der Klasse erzeugt
Es wurde die 3. Instanzen der Klasse erzeugt

Es wurden insgesamt 3 Instanzen erzeugt
		

In den Zeilen 2 bis 9, definiere ich mir zunächst eine Klasse (dies würde man normalerweise in der Header-Datei machen). In Zeile 7 habe ich ein statisches Attribut deklariert, in welchem die Anzahl der erstellten Objektinstanzen gespeichert werden soll. Zudem benötigt man noch ein Attribut, welches die Instanznummer enthält, die jedem einzelnen Objekt zugeordnet ist. Genau dies geschieht in Zeile 8. Auffällig daran ist, dass ich dieses Attribut als Konstante definiert habe, da ich eine eineindeutige ID erzeugen möchte, die später nicht mehr geändert werden kann.

In den Zeile 14 bis 21, ist dann die Implementierung der Klasse zu sehen, welche typischerweise in die entsprechende CPP-Datei zur Klasse gepackt wird. In diesem Beispiel handelt es sich lediglich um den Konstruktor. Die erste wichtige Sache hier, ist bereits in Zeile 14 zu sehen. Dort habe ich die statische Klassenvariable initialisiert. Dies macht man üblicherweise im Kopf der CPP Datei und es ist wichtig, dass man hier erneut den Typen des Attributes angibt. In Zeile 20 sehen Sie nun, wie das konstante Attribut initialisiert wird. Normalerweise macht man so eine Initialisierung der Konstanten, bereits in der Header-Datei, aber da ich den Wert ja dynamisch setzen will, ist dies der einzig mögliche Weg. Man kann Konstanten also nur in der Headerdatei oder zwischen Konstruktorkopf und dem Anweisungsblock der Methode setzen. In Zeile 20 wäre dies nicht mehr möglich. Zu diesem Konstruktor sei noch erwähnt, dass man normalerweise keine Ausgaben in Konstruktoren packt, aber da ich auf eine zusätzliche Ausgabemethode verzichten wollte, habe ich dies so gelöst.

Die Zeilen 25 bis 32 steht dann nichts neues. Hier erzeuge ich lediglich ein paar Objekte, um zu demonstrieren, wie sich diese Klasse verhält.

Ein weiteres Anwendungsgebiet für statische Klassenattribute, wären s.g. "Singleton", auf welche ich aber erst in einem späteren Kapitel eingehen werde. Hier sei nur schon erwähnt, dass es sich um Klassen handelt, von denen man nur eine Instanz erzeugen kann.

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012