tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
17083
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Xebov Xebov ist offline Mitglied
    Registriert seit
    Jul 2005
    Beiträge
    24
    Hi

    Kann mir jemand erklären was das static macht wenn mans davor setzt?

    MFG
    Xebov
     

  2. #2
    Registriert seit
    Apr 2002
    Ort
    Delmenhorst (Niedersachsen)
    Beiträge
    3.567
    moin


    Z.b. bei der Funktion:
    Code :
    1
    2
    3
    4
    5
    
    void keineahnung()
    {
        int wert = 0;
        wert++;
    }
    ist wert am Ende der Funktion immer 1

    Bei der Funktion:
    Code :
    1
    2
    3
    4
    5
    
    void keineahnung()
    {
        static int wert;
        wert++;
    }
    ist wert das erste mal am Ende der Funktion 1 und wird dann bei jedem Aufruf der Funktion um 1 erhöht.


    mfg
    umbrasaxum
     

  3. #3
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Zitat Zitat von Xebov
    Hi

    Kann mir jemand erklären was das static macht wenn mans davor setzt?

    MFG
    Xebov
    Wenn du das Schlüsselwörtchen static vor eine Variable setzt sagst
    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ß

    RedWing
    Geändert von RedWing (12.07.05 um 00:16 Uhr)
     
    "I'm not deaf, I'm ignoring you"
    ----

  4. #4
    spiderflo spiderflo ist offline Mitglied
    Registriert seit
    Feb 2005
    Ort
    Wien
    Beiträge
    22
    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
     

  5. #5
    Xebov Xebov ist offline Mitglied
    Registriert seit
    Jul 2005
    Beiträge
    24
    OK ich denke ich habs verstanden. Danke

    MFG
    Xebov
     

  6. #6
    Avatar von jokey2
    jokey2 jokey2 ist offline Mitglied Smaragd
    Registriert seit
    Nov 2004
    Beiträge
    1.235
    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-Funktion
    Code :
    1
    
    static void PASCAL CFile::Remove( LPCTSTR lpszFileName );
    Damit kann man auch eine Datei löschen, wenn man kein CFile-Objekt davon anlegt.
     

Ähnliche Themen

  1. Antworten: 7
    Letzter Beitrag: 10.06.10, 23:16
  2. Antworten: 5
    Letzter Beitrag: 30.09.08, 16:22
  3. public static const int
    Von port29 im Forum .NET Café
    Antworten: 6
    Letzter Beitrag: 16.06.08, 12:31
  4. Drupal static page mit unterseiten, alle auf die static page verweisend
    Von flokli im Forum Content Management Systeme (CMS)
    Antworten: 0
    Letzter Beitrag: 07.06.08, 21:04
  5. Antworten: 8
    Letzter Beitrag: 25.05.04, 15:31