ne frage zum scope operator...



  • ne frage zum scope operator...

    es kommt immer mal wieder vor, das man ne klasse geschrieben hat, wo methoden drin sind, die auch ausserhalb der klasse ganz nützlich sind. beispiel: klasse Datum, memberfun: isSchaltjahr(jahr) ...
    ich dachte immer, an die die memberfuns könne man auch so rankommen: Datum::isSchaltjahr(2005)
    is aber nicht! ohne objekt keine kekse...

    geht das nur, wenn man diese memberfuns static deklariert? oder wie ist das?
    sollte man es dann tun? (sie static deklarieren) oder hat sowas designtechnisch gesehen irgendwelche nachteile?

    oder sollte man in so einem fall irgendein Dummyobject machen, nur um an die memberfun ranzukommen? (sieht nicht so elegant aus, find ich.)

    vielen dank im voraus...



  • Ja die Methode muss static sein damit du auf sie von außerhalb zugreifen kannst.

    Wenn eine Methode keinen Zugriff auf interne Klassenvariablen benötigt ist sie bei mir immer ein Kandidat für static, damit ich sie auch - wie von dir ebenfalls gewollt - ohne Objekt benützen kann.

    sollte man es dann tun? (sie static deklarieren) oder hat sowas designtechnisch gesehen irgendwelche nachteile?

    So exzessiv wie ich das betreibe eventuell nicht, aber grundsätzlich spricht nichts dagegen. Nachteile hast du keine - natürlich kannst du nicht auf Membervariablen zugreifen, ist aber irgendwo logisch... 😉

    MfG SideWinder



  • IMHO hat ist eine Funktion, die nicht unbedingt zur Klasse gehören muss (also nicht auf die privaten Member der Klasse angewiesen ist und etwas mit dem Objekt statt in dem Objekt tut) _keine_ Methode und gehört deshalb in einen Funktor oder eine normale Funktion.

    Statische Member haben den Nachteil, dass sie nur auf statische Member der Klasse zugreifen können (bei einer Datumsklasse sollte es solche eigentlich nicht geben, mir fällt keine sinnvolle Einsatzmöglichkeit ein).

    Der Titel ist leicht irreführend.



  • @.filmor:
    stimmt! der titel war doof, mir ist so schnell kein passenderer eingefallen!
    -was sind eigentlich functoren?

    @alle:
    Thanks!! 🙂



  • Funktoren sind Funktionsobjekte, also Objekte von Klassen, die den Klammeroperator überladen haben. Das praktische daran ist, dass z.B. die ganzen STL-Funktionen wie transform oder for_each damit arbeiten. So könntest du für einen Haufen Daten (im Sinne von Datum) in einem vector abfragen, ob sie ein Schaltjahr sind und ähnliche Späße. Das geht zwar auch mit Funktionen, aber da hat man diesen doofen Dereferenzierungsoperator davor und man kann ihnen ohne weiteres keine festen Parameter oder ähnliches auf den Weg geben.


Anmelden zum Antworten