Klassen von mehreren Funktionen aufrufen



  • Hallo,
    wie kann ich eine Klasse von mehreren Funktionen aufrufen, ohne dass die Klasse in jeder Funktion neu erstellt und gelöscht wird.
    Bsp:

    #include <iostream>
    using namespace std;

    class Counter
    {
    public:
    AddEins();
    get_Zahl();
    public:
    int Zahl;
    };

    Counter::AddEins()
    {
    Zahl++;
    }

    Counter::get_Zahl()
    {
    return Zahl;
    }

    int Funktion_1();
    int Funktion_2();

    int main()
    {
    Counter BeispielKlasse;
    int i;
    Funktion_1();
    Funktion_2();

    i = Beispielklasse.get_Zahl;
    cout << i << endl;

    return 0;
    }

    int Funktion_1()
    {
    Beispielklasse.AddEins(); // mein Klasse soll auch in den Funktionen ver-
    } // wendet werden.

    int Funktion_2()
    {
    Beispielklasse.AddEins();
    }

    Bsp. Ende

    Für Antworten bedanke ich mich im vorraus.

    C++Genie*

    *Der Name entstand, weil "Mathegenie" schon belegt war.



  • Bitte Code-Tags benutzen!

    Es gibt mehrere Möglichkeiten:
    1. Member der Klasse Counter static machen
    2. Referenz des Counters an die Funktionen übergeben
    3. Singleton-Pattern
    Ist aber wahrscheinlich nicht die "richtige" Lösung

    Mache dir am besten auch noch den Unterschied zwischen Klasse und Objekt klar.



  • Grob gesagt: Eine Klasse definiert nur das Verhalten beliebiger Objekte - um die MEthoden nutzen zu können, benötigst du ein konkretes Objekt - woher du das bekommst, ist dem Compiler egal (aber die lokalen Variablen der main() sind in anderen Funktionen so nicht verfügbar).

    PS: Es wäre übrigens nützlich, vollständige Funktionsdeklarationen anzugeben - inklusive Ruckgabetyp 😉



  • @C++Genie
    Für dein Problem ist folgendes die einfachste Lösung

    .filmor schrieb:

    2. Referenz des Counters an die Funktionen übergeben

    Und noch zwei Tipps:

    Bis auf ctor/dtor muss eine Funktion einen Rückgabetyp haben, und sei es nur void.

    AddEins();
    

    Ist zB keine korrekte Deklaration einer memberfunktion.

    Achte auf Gross-/Kleinschreibung, BeispielKlasse != Beispielklasse.


Anmelden zum Antworten