Seite 1 von 1
static Variablen
Verfasst: 1. März 2009 15:41
von Illuminatus
hi habe ich das richtig verstanden?
wenn ich eine klasse habe
Code: Alles auswählen
class soundso{
private:
static int statischeVariable;
}
und dann mehrere instanzen dieser klasse bilde, dann haben alle instanzen dieser klasse denselben wert der statischen Variablen? das heißt änder ich den wert der variablen in einer instanz ist sie für alle instanzen geändert?
Verfasst: 1. März 2009 18:01
von franzf
static-Variablen sind unabhängig von jeder Klasseninstanz. SIe existiern auch wenn keine Instanz der Klasse existiert, und zwar genau einmal.
Demnach ändert sich die Variable nicht in jeder Instanz, man kann ihn auch nicht für eine Instanz ändern.
Verfasst: 1. März 2009 18:10
von Illuminatus
wie habe ich dann zugriff darauf ohne instanz?
kann man dann auch methoden wie in java static setzen?
Verfasst: 1. März 2009 19:36
von franzf
Du bist hier seit 3 Monaten registriert, und hast es scheinbar immer noch nicht geschafft, dir ein Buch über C++ zu Gemüte zu führen.
So Sachen wie static-Member und Methoden sollten eigentlich überall gut erklärt werden. Z.B.
hier. Das erste Google-Ergebnis auf der Suche nach
C++ static.
Verfasst: 4. März 2009 16:48
von CLRS530
Ich muss dir da wiedersprechen. Die Sache mit static wird meiner Meinung so gut wie nirgends wirklich erklärt. Zumindestens für den eigentlichen Einsatz unzureichend/unverständlich, aber das mag natürlich auch an der Limitation meiner eigenen Person liegen

.
Wo ich es das erste Mal verwendet habe, musste ich, bis ich es verstanden habe auch einige Quellen durchlesen.
Also werde ich dir hier einmal helfen.
Hast du Beispielsweise in dem Header einer Klasse folgendes:
Musst du am Anfang der Implementation noch die eigentliche Instanz bilden, da Statics sonst nur definiert sind.
cpp Anfang:
Code: Alles auswählen
QVector<FormatInfos> SevenZipLibrary::formats;
QVector<FormatInfos> *MyLibrary:getFormatInfos()
{
return &formats;
}
Willst du diese Static Klasse nun benutzen, kannst du in jedem beliebigen Modul folgendes machen
Code: Alles auswählen
#include "mylibrary.h"
QVector<FormatInfos> = MyLibrary::getFormatInfos();
Das schließt natürlich ein, dass du von dort auch auf die Variable schreiben kannst. Aufpassen musst du nur, wenn du Multithreadet Anwendungen schreibst, dann darf der Zugriff nur einmal erlaubt werden.
Ich hoffe das war Verständlich.
Verfasst: 28. Juli 2009 10:49
von graythornWW
Nur als Anregung und Ausblick:
Das schließt natürlich ein, dass du von dort auch auf die Variable schreiben kannst. Aufpassen musst du nur, wenn du Multithreadet Anwendungen schreibst, dann darf der Zugriff nur einmal erlaubt werden.
statics sollten meiner bescheidenen Meinung nach weitgehend vermieden werden, insbesondere in multithreading Applikationen. Sie sind - insbesondere wenn sie nicht private sind - recht fehleranfällig und blöd zu debuggen.
Eine sehr viel schönere Lösung stellt in vielen Fällen das
Singleton-Pattern dar. Das hier zu erklären sprengt den Rahmen, aber ich empfehle nachdrücklich entsprechende Literatur über Pattern-Programmierung zu lesen
