Static Variable in Methode

higret

Mitglied
Hi

Ich bin eben auf, meiner Meinung nach, ein komisches Verhalten gestoßen.

Ich hatte in einer Methode eine Variable als Static deklariert und der Inhalt der Varialbe (QList<QPoint>) war dann auch in den anderen Objekten der Klasse vorhanden, als hätte ich die Variable direkt als statische Membervariable deklariert.

Aber es müsste sich doch genauso wie bei ganz normalen static Variablen in Funktionen verhalten und nicht in der Klasse static sein

mfg Higret
 
Zuletzt bearbeitet:
Meines wissens, ist das die Besonderheit an static Variablen in Klassen, sie gelten immer für die gesamte Klasse.
Wird verwendet, um z.B. die Anzahl der Instanzen zu zählen
 
Lokale Variablen der Speicherklasse static behalten ihren letzten Wert auch dann noch bei, wenn ihr Gültigkeitsbereich verlassen wird. Beim nächsten Eintritt in den Gültigkeitsbereich kann dann mit dem zuletzt abgespeicherten Wert weiter gearbeitet werden. Wohl gemerkt, dies betrifft nur die Erhaltung des Wertes, der Gültigkeitsbereich der Variable bleibt weiterhin auf den Block begrenzt in dem sie definiert ist.

Das heisst also auch innerhalb der Klasse wenn ihre Methode verlassen wird in der sie definiert ist... !?
 
moin



Ja, eine static-Variable gillt für die ganze Klasse und für alle Instanzen der Klasse gleich.
Wenn du sie in einer Methode deklarierst, ist der Wert auch immernoch gleich wenn du die Methode das nächste mal aufrufst.
Warum willst du die in einer Methode deklarieren?


mfg
umbrasaxum
 
ich hab mir gedacht ich deklariere die Variable in der Methode static, wo sie berechnet wird (bis zu einem bestimmten Ereignis, danach wird der letzte Zustand einfach zurückgegeben)

Hab die Variable jetzt als ganz normale Membervariable deklariert und überprüfe einfach nur, ob die neuberechnet werden muss

aber ich glaub wir reden ein bisschen aneinander vorbei

so hatte ich das

Code:
class test {
  QList<QPoint> getpoints()
  {
     static QList<QPoint> p; // diese variable ist in allen Instanzen dieseble
    
     if (berechnePoints)
       // Punkte berechnen
     else
        return p;
  }
};
 
Zurück