Unterschiede zwischen Definition im h/hpp oder cpp?



  • Wo liegen eigentlich die technischen Unterschiede, wenn ich meine Definition in den Header Dateien mache, oder seperat in cpp Dateien?

    Man sieht ja häufig Konstrukte wie:

    class foo
    {
    public:
      foo() {  }
      ~foo() { }
    
      bool bar()
      {
         if(bedingung)
           return true;
    
         return false;
      }
    
    }
    

    Der Vorteil der Trennung liegt auf der Hand, aber gibt es auch technische Unterschiede?

    Danke! 🙂



  • Imho ist eine solche Funktion implizit inline, oder? Aber nur wenn du sie direkt in der Klasse definierst.

    Was ja immer noch nicht == im Headerfile definiert heißt.

    Weitere technische Unterschiede sind mir nicht bekannt.

    MfG SideWinder



  • Marc M. schrieb:

    Der Vorteil der Trennung liegt auf der Hand, aber gibt es auch technische Unterschiede?

    😕 Die Vorteile sind doch hauptsächlich technischer Natur. Stichwort: seperate Übersetzung.



  • Ich denke fast, dass er mit "technisch", Änderungen im fertig compilierten und gelinkten Maschinencode meint.

    MfG SideWinder



  • HumeSikkins schrieb:

    😕 Die Vorteile sind doch hauptsächlich technischer Natur. Stichwort: seperate Übersetzung.

    Danke für die Antworten... Mit technisch meinte ich speziell, ob die Methoden automatisch inline sind. Ich habe in den letzten Tagen viel Code gesehen, bei denen die komplette Implementierung in der Klasse gemacht wurde. Das wunderte mich ein wenig, da man ja nur sehr kleine Methoden inlinen sollte.

    Wenn ich meine eigenen Header inkludieren möchte, was ist eigentlich nach dem Standard korrekter:

    #include <myheader.h>
    #include "myheader.h"
    

    Vielen Dank!



  • 1. Waren das rein zufällig Template-Klassen? Dann musst du die nämlich in den Header schreiben.

    BTW: Gibts eigentlich keinen Unterschied zwischen Definition im Header irgendwo und Definition in der Klasse selbst? Nur weil das hier so brav übergangen wird.

    2. Das kommt ganz drauf an, wenn die Header-Datei in einem Standard-Include-Verzeichnis deines Compilers liegt ist <header> besser, ansonsten "header", da man normalerweise nur davon ausgeht, die Standard-Header-Dateien im Standard-Include-Verzeichnis vorzufinden includiert man auc nur diese über <header>, eigene werden fast immer über "header" includiert.

    MfG SideWinder



  • ad 2

    #include "iostream"
    
    int main () {
      std::cout << "foo\n";
    }
    

    sucht iostream auch im standard-includeverzeichnis, wenn die datei sonst nicht gefunden wird.


Anmelden zum Antworten