C ++: Verwendet für statische Datenelemente

Statische Datenelemente haben zig Anwendungen in C ++, aber hier sind nur einige davon. Erstens können Sie statische Elemente verwenden Zählung der Anzahl von Objekten zu halten über schweben.

Bedenken Sie jedoch, dass diese Zählung gibt die Anzahl der Schüler Objekte (einschließlich aller Provisorien) und nicht notwendigerweise die Zahl der Studenten.

Ein eng verwandtes Verwendung für ein statisches Element ist als ein Flag, um anzuzeigen, ob eine bestimmte Aktion stattgefunden hat. Zum Beispiel kann eine Klasse Radio Möglicherweise müssen Hardware zu initialisieren, bevor Sie die erste Sende Melodie Befehl, aber nicht vor der anschließenden Melodien. Ein Flag, das anzeigt, dass dies die erste Melodie ist genau das Richtige. Dazu gehören Beflaggung, wenn ein Fehler aufgetreten ist.

Eine weitere gebräuchliche Anwendung ist Platz für den Zeiger auf das erste Element einer Liste zur Verfügung zu stellen - das so genannte Head-Zeiger. Statische Elemente können Bits von gemeinsamen Daten zuordnen, dass alle Objekte in allen Funktionen Aktie (Übernutzung dieser gemeinsamen Speicher eine wirklich schlechte Idee ist, da dies zu Tracking-Fehler erschwert).

Beachten Sie, wie die statische Member-Funktion Nummer() kann die statische Datenelement zugreifen noOfStudents. In der Tat, das ist das einzige Mitglied der Klasse, die sie zugreifen können - eine statische Member-Funktion ist nicht mit einem Objekt zugeordnet ist. Waren Sie zu erklären, Name() zu statisch sein, könnten Sie beziehen sich auf Name des Studenten(), das würde sofort bitten, die Frage, # 147-Welcher Name # 148?;

Der folgende Ausschnitt ist nur ein Fall, in dem eine statische Methode direkt auf eine nicht-statische Member verweisen können:

Klasse Schüler {public: static int elementsInName () {int sizeOfArray = sizeof (name) -return sizeOfArray / sizeof (char) -} geschützt: char name [MAX_NAME_SIZE] -} -

Hier ist die statische Methode elementsInName () bezieht sich auf Name ohne jedes Objekt verweist. Dies war nicht legal vor dem 2011-Standard. Es ist jetzt, da die erlaubte Größe von name ist die gleiche für alle Objekte. Somit spielt es keine Rolle, welches Objekt Sie sich beziehen.

Sie fragen sich vielleicht, warum sizeof (name) wurde geteilt durch sizeof (char). Das sizeof (name) gibt die Anzahl von Bytes in dem Array-Namen. Aber was Sie wollen, ist die Anzahl der Elemente in Name, so haben Sie durch die Größe jedes Elements in Namen zu teilen.

Aber ist das nicht sizeof (char) gleich 1? Na ja, vielleicht, aber vielleicht auch nicht. die Aufteilung der Größe von die Anordnung durch die Größe von ein einzelnes Element arbeitet immer für alle Array-Typen.

Menü