bleibt klassen init erhalten??



  • Hallo Leute,

    ich bin neu in der objekt orientierten Programmierung und habe dazu eine Frage:
    Also ich benutze zwei Klassen (Klasse1 und Klasse2).

    in Klasse1 habe ich zwei globale Variable:

    Klasse2 test;
    bool start=true;

    Wenn ich dann in meinem Progamm den Button drücke:

    void Klasse1::Pressbutton()
    {
    if (start)
    {
    test.Init;
    start=false;
    }
    test.Ausgabe;
    }

    So meine Frage ist jetzt, die Eigenschaften, die ich beim erstemal initialisiere, bleiben die bei spätere Aufrufen erhalten?

    Mein Problem ist, das mein Programm beim erstmal noch den richtigen Wert ausgibt und danach nicht mehr. Deshalb habe ich überlegt, ob die "Initialisierung" verloren geht.

    Falls gewünscht kann ich auch gerne den Quellcode posten. hatte nur angst, dass das etwas den Rahmen sprengen könnte 😉

    gruß ani



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ (auch C++0x, bzw. C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Anika schrieb:

    in Klasse1 habe ich zwei globale Variable:

    Das Widerspricht sich irgendwie. Global oder in der Klasse? Meinst du vielleicht static, aber in der Klasse?

    void Klasse1::Pressbutton()
    {
    if (start)
    {
    test.Init;
    start=false;
    }
    test.Ausgabe;
    }

    Das sieht nicht so sehr nach C++ aus - da sind keine Funktionsaufrufe drin, das Init und Ausgabe macht so keinen großen Sinn. Das Init lässt außerdem mangelhaftes Design vermuten. Sowas sollte wenn überhaupt, dann in einem Konstruktor aufgerufen werden, aber nicht in irgendwelchen Methoden.

    So meine Frage ist jetzt, die Eigenschaften, die ich beim erstemal initialisiere, bleiben die bei spätere Aufrufen erhalten?

    Solang du das gleiche Objekt aufrufst, ja.

    Mein Problem ist, das mein Programm beim erstmal noch den richtigen Wert ausgibt und danach nicht mehr. Deshalb habe ich überlegt, ob die "Initialisierung" verloren geht.

    Kann sein. Vielleicht hast du auch andere Fehler. Ohne den Quelltext kann man das von hier aus nicht beurteilen.

    Falls gewünscht kann ich auch gerne den Quellcode posten. hatte nur angst, dass das etwas den Rahmen sprengen könnte 😉

    Kommt auf den Quellcode an. 10-50 Zeilen sprengen sicherlich nicht den Rahmen. 200 Zeilen oder mehr aber schon 😉

    Lies dir am besten erstmal den Link in meiner Signatur durch, da stehen Dinge zum Posten von Quellcode etc. drin.



  • Anika schrieb:

    in Klasse1 habe ich zwei globale Variable:

    Wie von pumuckl schon gesagt, passt diese Aussage nicht. Von "global" spricht man bei Variablen nur, wenn diese Außerhalb von Funktionen/Klassen stehen.

    Vereinfachtes Beipiel:

    int glob = 1; // <-- globale Variable
    
    class A
    {
      public:
        int a;        // <-- Membervariable (eigener Wert je Instanz/Objekt der Klasse)
                      //     Gilt für die Lebenszeit einer Instanz
        static int b; // <-- statische Membervariable (Nimmt einen Wert an, der Klassenweit über alle Instanzen/Objekte gilt)
    };
    
    int A::b = 1; // Initialisierung der statischen Variable (in der Sourcedatei)
    
    int foo(int c) // <-- Parameter (Funktionslokale Variable)*
    {
      int d; // <-- Lokale (Funktionslokale) Variable.*
      // * gelten vom Eintritt bis zum Austritt der Funktion
    
      { // <-- Die geschweiften Klammern leiten einen weiteren "Lebensbereich"/Scope ein
         int e; // <-- lokale Variable die innerhalb dieses Scopes gilt
         int d; // <-- lokale Variable die innerhalb dieses Scopes gilt, und
                //     innerhalb diesen die äußere Variable "überdeckt" (die aber
                //     weiterhin, und unabhängig von dieser existert).
      }
    }
    

    Wir müssen daher erst einmal wissen was du meinst.



  • Ich verstehe die Fragestellung auch nicht vollständig. Klassen sind erweiterte Strukturen mit eigener Funktionalität. Initialisierungen erfolgen im Konstruktor jeder Klasse einzeln. Wo genau ist das Problem? 😕


Anmelden zum Antworten