Kann man auf Funktionen einer Klasse zugreifen, die keine Instanz hat?



  • Hallo.

    Habe folgendes Problem:

    Es gibt eine Klasse CBoot. Es soll immer dann eine Instanz davon geschaffen werden, wenn der Spieler ein neues Boot baut. Allerdings muss natürlich vorher geguckt werden ob er genug Geld hat. Diese Variable soll innerhalb der Klasse CBoot deklariert sein. Kann ich irgentwie bevor ich eine Instanz erschaffe auf diese Variable zugreifen? Also gewissermaßen eine globale Variable/Funktion innerhalb der Klasse. Sowas wie CBoot::Preis vielleicht?
    Oder an was ich auch dachte einen Konstruktor mit Rückgabewert. Gibts aber nicht oder?

    Vielen dank für Antworten!!



  • Genau dafür gibt es statische Variablen. Diese sind von allen Instanzen einer Klasse unabhängig, können aber logisch an die Klassen gebunden werden. Als Klassenmember sind sie auch den Zugriffsspezifizierern unterworfen.

    class MyClass
    {
        public:                   // Muss öffentlich sein, wenn von ausserhalb zugegriffen wird.
            static double Var;        // Deklaration.
    };
    
    double MyClass::Var = 4.3;    // Definition muss ausserhalb gemacht werden.
    
    int main()
    {
        double f = MyClass::Var;  // Zugriff auf statische Member mit operator::
    }
    


  • Warum willst du den Kontostand in CBoot haben ???

    Jedenfalls: Stichwort static



  • super danke wusste ich noch nicht



  • EsIstAus schrieb:

    Warum willst du den Kontostand in CBoot haben ???



  • Er sagte eigentlich Preis.

    Noch eine Ergänzung zu meinem oberen Beispiel: Das diente nur zur Erklärung des Schlüsselwortes static in diesem Kontext. Besser, man macht statische Methoden, um den Wert zurückzugeben. Es ist auch möglich, statische Konstanten zu definieren ( static const ... ).



  • D'oh me...



  • Wenn ich die Frage einwerfen darf: Eine statische Methode besitzt ja keinen this-Zeiger, man kann sie auch ohne Objekt aufrufen...
    Aber was genau bringt mir das?
    Wenn ich eine Methode außerhalb einer Klasse/eines Objektes anwenden will, dann schreibe ich sie doch einfach außerhalb der Klasse, sodass ich sie einzelnt aufrufen kann...

    Welchen Sinn hat denn das Ganze ?

    (Ich fand die Gelegenheit zu fragen einfach gut weil es hier ja um statische Methoden geht..Falls das jetzt doch falsch war, bitte korrigieren :/)



  • KeksX schrieb:

    Aber was genau bringt mir das?
    Wenn ich eine Methode außerhalb einer Klasse/eines Objektes anwenden will, dann schreibe ich sie doch einfach außerhalb der Klasse, sodass ich sie einzelnt aufrufen kann...

    Welchen Sinn hat denn das Ganze ?

    Du hast damit das Konzept der Datenkapselung eingehalten. Die statische Methode gehört logisch zur Klasse. Wenn du sie ausserhalb deklarierst, musst du die Zugriffspezifizierer durch friend oder public ausser Kraft setzen, was nicht gerade schön ist, schon gar nicht, wenn es sich besser lösen lässt.


Anmelden zum Antworten