Normalerweise befindet sich die Klassendefinition normalerweise in Ihrer .h-Datei und die Implementierung befindet sich in Ihrer .c (pp) -Datei.
Ein Vorteil von #include "a.h"
in Ihrer b.c-Datei und nicht in Ihrer b.h-Datei ist, dass, wenn sich a.h ändert, nicht nur b.c, sondern auch jede andere Datei, die b.h enthält, neu kompiliert wird.
Sie sind auch nicht unnötig Implementierungsdetails von B zu offenbaren jedermann mit b.h. Die Idee ist, dass b.h keine zusätzlichen Informationen enthalten sollte, die für jemanden, der Klasse B verwendet, nicht von Interesse sind (nicht weil es geheim ist, sondern weil es den Leuten egal ist und man sie nicht damit belästigen möchte).
Es ist nicht nötig, irgendjemanden, einschließlich b.h, zu zwingen, indirekt auch ein Dutzend anderer .h-Dateien einzuschließen (weil sie in b.h enthalten sind), nur weil Sie dieses Zeug in b.c. Vermeiden Sie Unordnung.
Also, wenn möglich, ist es am besten zu #include "a.h"
in b.c!
Aber das ist nicht immer möglich. Wenn Sie nur A in B.c verwenden und es keine Referenzen auf A in B.h.h gibt, dann ist es in Ordnung. Auch wenn bh nur enthält Zeiger auf A (dh als Mitglieder, Funktionsargumente oder Rückgabewerte), aber keine ‚Typ abhängig‘ Referenzen, können Sie auch nur diese in bh setzen könnte:
class A;
Und noch halten #include "a.h"
in Ihrem bc Aber wenn es mehr Referenzen oder Abhängigkeiten zu a.h gibt, auf die auch b.h wirklich nicht verzichten kann, dann sollte #include "a.h"
gehen in b.h
Sie können keine .c files einschließen =) – karlphillip
@karlphillip: Warum nicht? :) – sth
Ich glaube, ich habe die Frage missverstanden. – karlphillip