Allgemeine Frage zur Klassendeklaration/definition



  • Kóyaánasqatsi schrieb:

    Du hast aber das PS nicht berücksichtigt, daher keine Antwort auf die eigentliche Frage gegeben.

    Doch, habe ich. Sie war vielleicht nicht tiefgründig oder ausführlich, aber es war eine Antwort.

    Wer natürlich derart niedrige Anforderungen an eine Aussage stellt, um sie "Antwort" nennen zu dürfen, hat's auch nicht schwer - solle sich aber auch nicht wundern, wenn er wenig Freunde hat.

    Im übrigen wäre ja auch eine falsche Antwort eine Antwort ...

    Gruß,

    Simon2.



  • wenn er wenig Freunde hat.

    Habe ich wenig Freunde? 🙂



  • Halt doch einfach die Klappe Kóyaánasqatsi. Vor allem, da du ja offensichtlich nicht so viel Ahnung hast. Der OP fragte explizit nach dem _Sinn_ und es macht eben keinen Sinn.



  • Nexus schrieb:

    Bei normalen Klassen sollte man Memberfunktionen grundsätzlich nicht im Header definieren.

    Hallo Nexus,

    Was heißt "normale Klasse"? Nicht-Templateklassen?

    Die ursprüngliche Frage mal anders herum: Wann sind Definitionen im Header sinnvoll?



  • Regt euch nicht über Kóyaánasqatsi auf. Die Tatsache, dass er früher als "way" unterwegs war, sagt eigentlich bereits alles. 🙄

    Roger Wilco schrieb:

    Hallo Nexus,

    Was heißt "normale Klasse"? Nicht-Templateklassen?

    Ja, so habe ich es gemeint.

    Roger Wilco schrieb:

    Die ursprüngliche Frage mal anders herum: Wann sind Definitionen im Header sinnvoll?

    Wenn man weiss, was nicht sinnvoll ist, kann man doch auf das Sinnvolle schliessen. 😉

    Einige Leute definieren ganz kurze Methoden wie Setter und Getter im Header (inline). Ich schreibe deren Definitionen auch in Implementierungsdateien, Inlining-Optimierung sollte wie erwähnt trotzdem möglich sein. Ein wenig ist da auch Geschmackssache dabei.



  • Nexus schrieb:

    Roger Wilco schrieb:

    Die ursprüngliche Frage mal anders herum: Wann sind Definitionen im Header sinnvoll?

    Wenn man weiss, was nicht sinnvoll ist, kann man doch auf das Sinnvolle schliessen. 😉

    Ich habe ja auch meine Frage erweitert und ganz allgemein von Definitionen gesprochen. Nicht nur von Klassen-Definitionen. 😉



  • Ah, ich dachte, es ginge immer noch um Memberfunktionen. Globale Funktionen verhalten sich übrigens gleich (abgesehen von "impliziten inline" innerhalb der Klasse, das bei globalen Funktionen nicht geht).

    Klassen- und Namensraumdefinitionen sind unbestritten sinnvoll im Header. Typdefinitionen eigentlich auch, wenn sie benötigt werden (je nachdem auch innerhalb von Klassen oder Namensräumen).

    Bei Variablen hingegen musst du die Definition in den meisten Fällen in der .cpp-Datei vornehmen, da du sonst Linkerfehler wegen mehrfach definierten Symbolen erhältst. Ausnahmen sind statische konstante integrale Variablen. Da kann es sinnvoll sein, den Variablenwert für den Compiler sichtbar zu machen (zum Beispiel bei Template-Metaprogrammierung). Andererseits gilt hier natürlich auch wieder, dass bei einer Änderung des Wertes ein Neu-Kompilieren aller header-benutzenden Dateien notwendig wird. Auch Konstanten von enum s müssen im Header definiert werden, sofern der enum -Typ bekannt sein soll.



  • Bedanke mich für die ausführlichen Antworten.



  • Kóyaánasqatsi schrieb:

    wenn er wenig Freunde hat.

    Habe ich wenig Freunde? 🙂

    Habe ich das behauptet?

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Kóyaánasqatsi schrieb:

    wenn er wenig Freunde hat.

    Habe ich wenig Freunde? 🙂

    Habe ich das behauptet?

    Gruß,

    Simon2.

    Ja.



  • way schrieb:

    Simon2 schrieb:

    Kóyaánasqatsi schrieb:

    wenn er wenig Freunde hat.

    Habe ich wenig Freunde? 🙂

    Habe ich das behauptet?

    Gruß,

    Simon2.

    Ja.

    Wo?

    Simon2 schrieb:

    ...
    Wer natürlich derart niedrige Anforderungen an eine Aussage stellt, um sie "Antwort" nennen zu dürfen, hat's auch nicht schwer - sollte sich aber auch nicht wundern, wenn er wenig Freunde hat.

    Im übrigen wäre ja auch eine falsche Antwort eine Antwort ...

    Gruß,

    Simon2.

    Gruß,

    Simon2.


Anmelden zum Antworten