Ich versuch's nochmal ein wenig anders zu sagen.
Eine
Unit ist ein Codemodul, das Funktionen enthält und diese gegebenenfalls exportiert, und das ganze in einem Stück (daher ja auch
Unit).
In C/C++ gibt es dieses Konzept nicht. Wenn man Funktionen aus anderen Modulen verwenden will, muss man diese explizit dem Compiler bekannt machen, indem man sie deklariert. Anders als der Delphi-Compiler weiß ein C/C++-Compiler in dem Moment, in dem er ein Codemodul kompiliert, rein gar nichts über die anderen Module, auch wenn er Funktionen, die in diesen anderen Modulen enthalten sind, aufrufen soll. Deshalb muss man ihm die Signatur geben, er vermerkt diese in der Objektdatei, und am Ende (und zwar wirklich als eigenes Programm) muss der Linker, der wiederum gar nichts vom Compiler weiß, diese Signaturen auswerten und hoffen, dass er jede Funktionsdefinition (!) nur einmal angeboten bekommt, weil er sonst im Normalfall nicht weiß, welche Version er verwenden soll.
Aus diesem Grund wird unter Umständen jede Objektdatei, die deine Headerdatei inkludiert, die Definitionen (d.h. den Code) der Funktionen enthalten, genauso als hättest du in jedem Quellcodemodul die Funktion erneut definiert.
Und ich sag's nochmal: In Delphi ist das ganze genauso, mit dem Unterschied, dass du die Deklaration und die Definition in ein und derselben Datei unterbringst, während du in C/C++ eigentlich nur aus Bequemlichkeitsgründen die Deklarationen auslagerst. Ausnahme sind wie oben genannt inline-Funktionen.
Aufgrund der Architektur gehören in C/C++ in Header-Dateien also weder Daten- noch Funktionsdefinitionen.