Kurz gesagt: Nein!
Jede C ++ - Übersetzungseinheit (C ++ - Quelldatei) wird unabhängig kompiliert. Die Klassenvererbung usw. wird zur Laufzeit eingerichtet. Aus diesem Grund können Sie Basisklassen in separat verwalteten Bibliotheken verwenden, die aktualisiert werden können, ohne dass die Kompilierung von abgeleiteten Klassen erforderlich ist, solange die API und die ABI kompatibel bleiben.
Um die Antwort von ildjarn zu erweitern, benötigt das Kompilieren der Implementierung einer Kindklasse nur die API / den Vertrag der Elternklasse, nicht die Implementierung. Das würde in einer Datei wie Parent.h
liegen, die von den Dateien enthalten sein würde, die die Implementierung des Kinds enthalten.
Im Allgemeinen, nein. Der Compiler erstellt Symbole, die alles darstellen, was er nicht erkennt, aber ignorieren kann, und der Link wird diese Symbole in den richtigen Code umwandeln. In Ihrem Fall teilt der Header dem Compiler alles mit, was er wissen muss, um seine Kindklasse zu kompilieren, so dass die Details warten können.
... Ich konnte eine Kindklasse vor einer Elternklasse zusammenstellen ...
"Kompilieren" ist kein genau definierter Begriff, daher ist nicht genau klar, was Sie hier meinen. Aber im Allgemeinen, nein, Sie können keine Kindklasse vor der Elternklasse kompilieren. In C ++ muss der übergeordnete Typ complete sein, bevor Sie als Basisklasse für einen anderen untergeordneten Klassentyp verwendet werden können. Sie werden etwas falsch interpretiert oder dem Begriff "compile" eine eher unorthodoxe Bedeutung geben.