Methoden vs. static Klassenmethoden



  • Hallo,

    ich hab irgendwie noch nicht ganz verstanden was der Unterschied zwischen einer normalen Methode und einer statischen Klassenmethode ist.
    Klar, die statics verschmutzen den globalen Namespace nicht und können nur auf static Variablen zugreifen. Aber soll das heißen, man solle möglichst oft diese benutzen?

    außerdem hab ich hier noch ein Problem mit meinem Testcode ...

    hat vllt jemand ein paar Worte?

    #include <iostream>
    using namespace std;
    
    class Test {
       public:
          Test(int v): var_(v) {
              dawn();
          }
    
          ~Test() {
              dusk();
          }
    
    
       void print_truth() const {
    
       cout << "Was ist nur die halbe Wahrheit? :"
            << var_ << endl;
    
       }
    
       private:
           int var_;
           static int stat_var_;
    
           static void dawn(){
    
               cout << "Die Wahrheit : "
                    << ++stat_var_
                    << endl;
    
           }
    
           static void dusk(){
    
               cout << "Die Wahrheit bleibt : "
                    << --stat_var_
                    << endl;
    
           }
    };
    
    int Test::stat_var_ = 42;  // wird das noch so gemacht?
    
    int main(){
    
    Test t(21);
    
    t.print_truth;
    
    return 0;
    }
    
    

    hier in Zeile 49 gibt mir der Compiler folgenden Fehler aus

    49|error: statement cannot resolve address of overloaded function|
    

    wahrscheinlicher hab ich wieder irgendeine dummheit übersehen, aber ich kann mit der Meldung nichts anfangen.



  • @Lou-Cyphr3 sagte in Methoden vs. static Klassenmethoden:

    wahrscheinlicher hab ich wieder irgendeine dummheit übersehen

    ()



  • @manni66

    jap, hab ich auch gerade gemerkt. Danke trotzdem.

    Kannst du mir noch was zu der ursprünglichen Frage sagen?



  • @Lou-Cyphr3 sagte in Methoden vs. static Klassenmethoden:

    ich hab irgendwie noch nicht ganz verstanden was der Unterschied zwischen einer normalen Methode und einer statischen Klassenmethode ist.
    Klar, die statics verschmutzen den globalen Namespace nicht und können nur auf static Variablen zugreifen.

    Nichtstatische Methoden verschmutzen den globalen Namespace auch nicht. Und statische Methoden können auch auf nichtstatische Member zugreifen, sofern sie Zugang zu einer Instanz der Klasse haben.

    Der einzige Unterschied ist, dass nichtstatische Methoden immer auf so einer Instanz aufgerufen werden müssen und sie implizit mitgeliefert kriegen, nämlich this.

    Edit: Das stimmt natürlich nicht ganz. Nichtstatische Methoden können auch virtuell sein.

    t.print_truth;

    t.print_truth()



  • @Lou-Cyphr3 sagte in Methoden vs. static Klassenmethoden:

    Klar, die statics verschmutzen den globalen Namespace nicht

    Ein namespace hat den gleichen Effekt.

    und können nur auf static Variablen zugreifen.

    Wenn sie ein Objekt der Klasse übergeben bekommen können sie auch auf die Innereien zugreifen.

    Aber soll das heißen, man solle möglichst oft diese benutzen?

    Nein



  • alright. danke


Log in to reply