Wegen Konstruktor cpp-File anlegen?



  • Hallo Leute!

    Ich hab eine ganz einfache Frage an euch. 🙂

    Und zwar hab ich ein Klasse mit einem Konstruktor (nur Initialisierungsliste) und sonst nur noch inline Methoden. Im Moment hab ich alles, auch den Konstruktor in den Header geschrieben.

    Soll ich für den Konstruktor nun extra ein cpp-File anlegen?

    ciao,

    🙂 Julia 🙂



  • *lol*
    Nein, mach das einfach so:

    class eineKlasse
    {
        int a, b, c, d;
    // ...
    public:
        eineKlasse()
            : a(1), b(2), c(3), d(4) {}
    //...
    };
    


  • Ich würde tendenziell eher anders herum verfahren, nämlich allen Code in cpps verstauen. In Headern halte ich nur Deklarationen.
    Meiner Meinung nach sind inlines nur in den seltensten Fällen vorteilhaft. Nachteilig ist, daß sie die Header eher unübersichtlich machen und beim Debuggen gelegentlich Probleme bereiten. Außerdem baust du die Welt neu, falls der Code geändert werden muß.
    Die meisten Inlines entstehen ohnehin bloß aus Faulheit und nicht aus technischen Gründen.

    Stefan.



  • Naja, wenn das eine kleine selten geänderte Helper-Klasse is die im großen und ganzen einfach ein paar Variablenwerte verwaltet ist das IMO schon ok.



  • Hallo,
    es gibt noch einen anderen Grund warum eine Klasse gerne mindestens eine nicht-inline-nicht-in-der-h-Datei-implementiert-Methode haben sollte.
    Dieser Grud liegt aber auf rein implementationstechnischer Ebene, hat dmzufolge nichts mit Standard-C++ zu tun und gilt nur, wenn die Klasse mindestens eine virtuelle Methode hat.

    Einige Compiler verhindern die mehrfache Erstellung einer vtable dadurch, dass sie die vtable für eine Klasse in der ersten cpp-Datei anlegen, in der der Compiler die erste nicht inline, nicht pure virtual function definiert sieht.

    Gibt es keine cpp-Datei, legt der Compiler keine vtable an. Im Glücksfall erhält man dann einen Linkerfehler.

    Ich habe mir damit aber auch schonmal einen ganz perversen Bug eingehandelt.
    Zu beginn der Arbeit hatte meine Klasse noch eine cpp-Datei. Dann habe ich irgendwann alle Methoden geinlined, cpp-Datei weg, trotzdem alte o-Datei (mit der vtable) mitgelinkt -> alte vtable mit falschen Informationen -> Debugging nightmare 🙂

    Naja, wie gesagt. Das hat nichts mit Standard-C++ zu tun. Ist manchmal aber trotzdem ganz gut zu wissen.

    [ Dieser Beitrag wurde am 04.04.2003 um 16:47 Uhr von HumeSikkins editiert. ]


Anmelden zum Antworten