Funktion einer Klasse aufrufen, ohne objekt zu erzeugen???



  • Ich hab dich als uncool detectiert!!!

    Das geht [was du willst] so:

    struct Foo {
        static void bar() { /* ... */ }
    }
    
    Foo::bar(); /* call */
    

    Aber es [,das was du WIRKLICK willst] geht so:

    namespace grafik {
        void foo();
    }
    
    void grafik::foo() { /* ... */ }
    
    grafik::foo(); /* call */
    

    👍



  • das ist falsche verwendung von namespaces. gibt nen ld error bei benutzung



  • uncool schrieb:

    das ist falsche verwendung von namespaces. gibt nen ld error bei benutzung

    😕 😕 😕



  • PS: Es ist Absicht dass da Stand-Bye statt Stand-By steht.



  • Hallo

    Ich wollte mal fragen, wo die Vor- und Nachteile der beiden Lösungen sind. Aus OOP-Sicht würde ich mich für Klassen entscheiden. Hat es einen Nachteil, wenn man dies tut, oder ist es schlechter Stil?

    chrische



  • chrische5 schrieb:

    Hallo

    Ich wollte mal fragen, wo die Vor- und Nachteile der beiden Lösungen sind. Aus OOP-Sicht würde ich mich für Klassen entscheiden. Hat es einen Nachteil, wenn man dies tut, oder ist es schlechter Stil?

    chrische

    Da gibts keine Unterschiede. Bloß dass man halt ein Objekt der Klasse anlegen könnte - was keinen Sinn macht, da sie ja bis auf die Statics leer ist. Schlechter Stil ist für *mich*, Klassen zu defnieren, die nur Statics haben. Sowas hat mit OPP gar nichts zu tun. Da finde ich die Lösung mit Namespaces deutlich besser.



  • 👍



  • was hat das denn für einen Sinn wenn ich Klassen mache oder structs oder wie auch immer und davon keine objekte erzeugen möchte um methoden zu verwenden??
    Das hab ich nicht verstanden..



  • Ich persönlich würde auch zur Namespace-Variante tendieren, aber, wenn Du es unbedingt in eine Klasse schreiben willst, und wenn Du davon nur ein (globales) Objekt erzeugst, um einen Zugriff auf die Funktionen zu haben, dann könntest Du es auch so machen:

    struct {
    	void foo() {
    		// do sth.
    	}
    } test;
    
    // Verwendung
    test.foo();
    

    So hast Du Deinen Punkt für die Methodenaufrufe, aber schön finde ich es eigentlich nicht. Wenn etwas thematisch zusammengehört, aber nicht auf ein Objekt angewendet wird, dann gehört das in meinen Augen in einen Namespace und nicht in eine Klasse. 🙂



  • C++ ist ne Multiparadigmensprache, deswegen wäre in C++ die Klassen-Als-Namespace-Missbrauchen-Methode schlechtes C++ und der namespace mit den Methoden drin sauberes C++.

    Die Standardbibliothek verwendet ja auch nen namespace std und kein class/struct std...



  • Klassen haben aber den Vorteil das man private Memberfunktionen haben kann.



  • ü schrieb:

    Klassen haben aber den Vorteil das man private Memberfunktionen haben kann.

    Witzig, macht aber meistens bei Funktione/Static-Members keinen Sinn. Da wäre dann ein Singleton angebrachter.



  • ü schrieb:

    Klassen haben aber den Vorteil das man private Memberfunktionen haben kann.

    // FreeFunc.cpp
    
    namespace {
      void myPrivateFunction();
    }
    

Anmelden zum Antworten