ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
17083
17083
EMPFEHLEN
-
Hi
Kann mir jemand erklären was das static macht wenn mans davor setzt?
MFG
Xebov
-
11.07.05 23:58 #2
- Registriert seit
- Apr 2002
- Ort
- Delmenhorst (Niedersachsen)
- Beiträge
- 3.567
moin
Z.b. bei der Funktion:
ist wert am Ende der Funktion immer 1Code :1 2 3 4 5
void keineahnung() { int wert = 0; wert++; }
Bei der Funktion:
ist wert das erste mal am Ende der Funktion 1 und wird dann bei jedem Aufruf der Funktion um 1 erhöht.Code :1 2 3 4 5
void keineahnung() { static int wert; wert++; }
mfg
umbrasaxum
-
Wenn du das Schlüsselwörtchen static vor eine Variable setzt sagst
Zitat von Xebov
du dem Compiler damit das die Variable zur ganzen Laufzeit über
existieren soll sprich wenn du eine lokale Variable als static deklarierst
wird sie beim verlassen des Blocks nicht gelöscht sondern bleibt
im Speicher erhalten...
In Punkto objektorientierung also bei Klassen, bedeutet static im
Prinzip dasselbe. Will heißen wenn du ein Attribut einer Klasse als
static deklarierst machst du sie zum Klassenattribut. Der Wert dieser
Variablen ist somit für alle Objekte gleich und es gibt nur ein
Exemplar dieser Variable (nicht wie bei einem normalen Attribut pro
Objekt, sondern einmal für alle Objekte) => eine Klassenvariable
exisitert unabhängig von der Existenz irgendwelcher Objekte dieser
Klasse.
//edit
@umbrasaxum
Der Wert muss nicht 1 am Ende des ersten Aufrufs deiner Funktions sein, da du die Variable nicht initialisierst...
Gruß
RedWingGeändert von RedWing (12.07.05 um 00:16 Uhr)
"I'm not deaf, I'm ignoring you"
----
-
Guten Abend vorerst!
Also folgendes ...
const Variablen/Datenobjekte sind konstant definiert und dessen Wert kann durch das Programm nicht mehr verändert werden.
Welche mit static vorran werden nicht mehr auf dem "Stack" unterhalten sondern wie externe Variablen im Datenseqment des Programms selbst.
Das heißt ihre Lebensdauer ist global. Der Geltungsbereich ist aber eingeschränkt.
Wenn man jetzt eine static Variable außerhalb jeder Funktion definiert, ist sie modulglobal und es gibt keine Probleme mit gleichnamigen Variablen aus anderen Quelldatein. Sie kann nur in diesem Modul verwendet werden und ihr Name wird nicht an den "Linker" weitergegeben. Sie ist also privat ...
Das gleiche gilt auch in einem Block (mit {}). Ihr Wert bleibt beim Verlassen des Blocks erhalten und du kannst dann wenn du wieder eintrittst weiterrechnen etc.
Das war jetzt großteils jetzt auf Variablen bezogen.
Also static const ist soweit ich das durchblicke modulglobal und kann nur von außerhalb des Programms verändert werden.
Bitte verbessert mich wenn ich mich irre.
Erkundige dich vielleicht auch mal unter Speicherklassen.
Mit freundlichen Grüßen und
noch einer guten Nacht
Florian
-
OK ich denke ich habs verstanden. Danke
MFG
Xebov
-
Es gibt noch eine weitere Bedeutung von static:
Wenn eine Memberfunktion einer Klasse als static deklariert wird, ist sie auch ohne ein entsprechendes Objekt verwendbar. Ein Beispiel ist die MFC-FunktionDamit kann man auch eine Datei löschen, wenn man kein CFile-Objekt davon anlegt.Code :1
static void PASCAL CFile::Remove( LPCTSTR lpszFileName );
Ähnliche Themen
-
non-static variable cannot be referenced from a static context
Von UGG116 im Forum Java GrundlagenAntworten: 7Letzter Beitrag: 10.06.10, 23:16 -
non-static methode mit static class aufrufen?
Von Error999 im Forum JavaAntworten: 5Letzter Beitrag: 30.09.08, 16:22 -
public static const int
Von port29 im Forum .NET CaféAntworten: 6Letzter Beitrag: 16.06.08, 12:31 -
Drupal static page mit unterseiten, alle auf die static page verweisend
Von flokli im Forum Content Management Systeme (CMS)Antworten: 0Letzter Beitrag: 07.06.08, 21:04 -
static, non-static... was denn nun & warum überhaupt
Von WebOlli im Forum JavaAntworten: 8Letzter Beitrag: 25.05.04, 15:31





Zitieren
Login






