Klasse ohne Instanz?



  • Ich brauche von den meisten meiner KLassen keine Instanz, wie designe ich diese Klasse am besten, statisch?



  • verstehe ich nicht wie man von den meisten klassen keine instanzen braucht. klingt sehr nach c-denken.

    ansonsten: namespaces und freie funktionen / variablen ODER nicht-instanziierbare klassen mit statischen methoden und membern.


  • Mod

    asdfaasdf schrieb:

    klingt sehr nach c-denken.

    Ich hätte da jetzt eher in Richtung java.math geschaut.



  • CppRookie schrieb:

    Ich brauche von den meisten meiner KLassen keine Instanz, wie designe ich diese Klasse am besten, statisch?

    In C++ gibt es keine statischen Klassen im eigentlichen Sinn. Was dem am nächsten kommt ist, wenn du alle Funktionen und Variablen in der Klasse static machst. Oder du benutzt einfach freie Funktionen, denn offenbar brauchst du keine Objektorientierung.



  • Ich würde sogar so weit gehen und sagen, dass Du dann keine Klassen brauchst.

    Das Beispiel java.math taugt nicht für C++ da diese "Klasse" Math in Java nur ein Workaround für fehlende Namespaces ist.

    Nicht instantiierbare Klassen mit statischen Methoden und statischen Membervariablen haben das Feature, dass die Methoden auf die statischen Membervariablen zugreifen können, auch wenn diese private sind. Allerdings wäre ein Singleton dann eventuell besser. Da hat man mehr Kontrolle über die Initialisierung.



  • asdfaasdf schrieb:

    verstehe ich nicht wie man von den meisten klassen keine instanzen braucht. klingt sehr nach c-denken.

    ansonsten: namespaces und freie funktionen / variablen ODER nicht-instanziierbare klassen mit statischen methoden und membern.

    Ich will eine Klasse schreiben für einen Loader eines eigenen Dateiformats, dann noch eine Klasse der Werte umrechnet und dann noch eine die die Werte ausgibt.

    Ich sehe da keinen Grund Instanzen dieser Klassen zu brauchen. Die Datei wird nur an einer Stelle komplett eingelesen und dann sofort wieder geschlossen. Die Werte werden zwar an verschiedenen Stellen umgerechnet aber die Umrechnung ist immer gleich. Tja und die Werte werden auch nur an einer Stelle ausgegeben.

    Ich sehe da keinen Bedarf für Instanzen. Wenn ich nur immer eine Instanz brauche, kann ich mir das Instantiieren auch schenken und wir hier beschrieben mit static arbeiten.



  • tntnet schrieb:

    Nicht instantiierbare Klassen mit statischen Methoden und statischen Membervariablen haben das Feature, dass die Methoden auf die statischen Membervariablen zugreifen können, auch wenn diese private sind.

    Gleiches hast du mit globalen Variablen, die in der .cpp-Datei definiert sind. Nur besser, da du keine Implementierungsdetails im Header hast und bei Änderungen keine Clients rekompilieren musst.

    Aber sowohl Klassen mit nur statischen Membern, globale Variablen, als auch Singletons sind oft nur eine Ausrede für fehlende Designüberlegungen. Vermeide sie wenn möglich, da sie nicht zu unterschätzende Probleme mit sich bringen.



  • CppRookie schrieb:

    Ich sehe da keinen Grund Instanzen dieser Klassen zu brauchen. Die Datei wird nur an einer Stelle komplett eingelesen und dann sofort wieder geschlossen.

    Und was genau spricht dagegen, an dieser Stelle eine Instanz zu erstellen?



  • CppRookie schrieb:

    asdfaasdf schrieb:

    verstehe ich nicht wie man von den meisten klassen keine instanzen braucht. klingt sehr nach c-denken.

    ansonsten: namespaces und freie funktionen / variablen ODER nicht-instanziierbare klassen mit statischen methoden und membern.

    Ich will eine Klasse schreiben für einen Loader eines eigenen Dateiformats, dann noch eine Klasse der Werte umrechnet und dann noch eine die die Werte ausgibt.

    Ich sehe da keinen Grund Instanzen dieser Klassen zu brauchen. Die Datei wird nur an einer Stelle komplett eingelesen und dann sofort wieder geschlossen. Die Werte werden zwar an verschiedenen Stellen umgerechnet aber die Umrechnung ist immer gleich. Tja und die Werte werden auch nur an einer Stelle ausgegeben.

    Ich sehe da keinen Bedarf für Instanzen. Wenn ich nur immer eine Instanz brauche, kann ich mir das Instantiieren auch schenken und wir hier beschrieben mit static arbeiten.

    wie würdest du es finden, eine klasse "MyCustomFileFormat" oder so zu machen, bei der der operator<< für std::basic_ostream's und der operator>> für std::basic_istream überladen sind und die diese umrechnungen als methoden anbietet? dann kannst du sogar mehrere dateien gleichzeitig offen haben und sie z.b. vergleichen.



  • Wozu die Mehrarbeit, ich brauche die Datei nur einmal? Das was ich programmiere soll funktionieren und nicht für eventuelle spätere Änderungen alles mögliche berücksichtigen. Wenn ich so arbeiten würde, dann würde ich die 10fache Zeit für ein fertiges Programm benötigen, ohne zu wissen, ob ich jemals die zusätzliche Funktionalität benutzen werden.

    So eine Vorgehensweise wäre nicht ökonomisch. Die Frage hat sich aber eh erledigt, da ich schon so gut wie fertig bin mittlerweile. Ich habe einfach komplett auf Klassen verzichtet und mich der eigentlichen Problemlösung gewidmet.

    Danke trotzdem für eure Antworten. Das nächste Projekt wartet schon.



  • CppRookie schrieb:

    Ich habe einfach komplett auf Klassen verzichtet

    Ja, das ist auch in diesem Fall die beste Lösung gewesen.
    Braucht man keine Klassen, nimmt man halt keine.


Anmelden zum Antworten