klasse in header und cpp file teilen so wichtig?



  • eigentlich eine recht einfache frage,aber sie beschäftigt mich schon ne weile
    es geht um das aufteilen von klassen in header und passende cpp datei
    man macht es ja "normalerweise" (so sagen es alle und so steht es im buch usw.) so,dass man die klasse selbst in dem header "roh" erstellt und ihre methoden dann in eine andere datei auslagert
    nun würde ich gern wissen,ob es so wichtig ist,es so zu machen oder ob ich auch meine komplette klasse in den header reinschreiben kann
    hatt das irgendwelche nachteile?
    immerhin wird beim inkludieren ja einfach der inhalt des headers in die hauptdatei kopiert und wäre das selbe,als wenn ich die klasse sofort in der main.cpp definire

    btw. ja,ich schreib gern alles klein aber hoffe trotzdem,dass es wer liest und antwortet



  • Im Endeffekt kannst du es machen wie du willst. Es geht eigentlich nur um eine saubere Aufteilung des Codes. Umfangreiche Programme werden unleserlich. Wenn du unterschiedliche Aufgaben in unterschiedlichen Dateien unter bringst dann findest du die auch besser wieder. Somit wird die Fehlersuche und/oder eine gewollte Änderung einfacher möglich.

    Die Aufteilung in .h + .cpp macht auch Sinn. Oft ist es uninteressant wie die Implementierung aussieht. Wenn man Funktionen nutzen möchte die schon geschrieben sind muss man in der Regel nicht wissen wie sie etwas machen, sondern nur wie man sie nutzen kann. Das heißt zum Beispiel, ich will nur wissen wie ich die Funktion ansprechen muss -> Datentypen, Anzahl der Parameter, Reihenfolge und so weiter.
    Das kann ich im Header wunderbar und schnell heraus finden. In der Implementierung muss ich den Code "überlesen", das ist anstrengender und dauert länger.

    Bei 100 Zeilen Code interessiert das nicht, doch bei grösseren Programmen ist das eine echte Hilfe.

    Man kann Programme auch so schreiben das man sie selber nach einer gewissen Zeit nicht mehr lesen kann. Die Aufteilung, Modularisierung, Kommentierung ist eine wichtige Komponente um das Programm ordentlich zu pflegen.



  • Du bekommst 3 Probleme, wenn du das machst.

    Das erste Problem ist, dass das compilieren ewig dauert. Wenn du ein Programm mit 1 000 000 Klassen hast und eine änderst, würde es normalerweise reichen nur die eine .cpp-Datei neu zu übersetzten. Wenn du die Klasse komplett in den Header schreibst, dann musst du alle 1 000 000 Klassen neu übersetzten. Das dauert ewig.

    Das zweite Problem ist, wenn du 1 000 000 Klassen gleichzeitig übersetzt brauchst du sehr viel Arbeitsspeicher, da ja alle Klassen gleichzeitig comipiert werden. Das heißt, die maximale größe deines Programms hängt vom Arbeitsspeicher deines Rechners ab.

    Das 3. Problem ist, dass alle Funktionen, die du direkt in den Header geschrieben hast, als inline Funktionen aufgefasst werden. Dadurch kann dein Programm erheblich größer werden.



  • ah gut,danke
    zwar kommen in meinen kleinen projekten keine 1m klassen vor,aber ich werde mir für die zukunft wohl lieber angewöhnen,es so zu teilen



  • noch eins:
    nehmen wir an, du schreibst eine lib oder dll, die api deklarationen sollen für die Kunden sichtbar sein, aber ohne irgendwelche Definitionen(kein opensource, auch uninteressant für die Kunden).Wie schaffst du es, wenn du die header und die cpp nicht trennst.


Anmelden zum Antworten