Unutmayın, C / C ++ önişlemcisi ayrı, tamamen metinsel bir işlem adımıdır. #includeDahil başlığının içeriği direktif çeker ve derleyici bunu ayrıştırması gerekir. Dahası, her birinin derlenmesi .cpptamamen ayrıdır, bu yüzden derleyicinin B.hderleme sırasında sadece ayrıştırılması , derlerken B.cpptekrar ihtiyaç duyduğunda en azından yardımcı olmaz A.cpp. Ve derlerken tekrar C.cpp. Ve D.cpp. Ve bunun gibi. Ve içinde bulunan herhangi bir dosya değiştiyse, bu dosyaların her birinin yeniden derlenmesi gerekir.
Yani sınıf söylemek Akullanımları sınıfını Bve sınıfları Cve Dkullanım sınıfı A, ancak manipüle etmek gerekmez B. Sınıf Asadece ileri bildirimi ile bildirilebiliyorsa, iki kez derlenenden Bdaha fazladır B.h: derlerken B.cppve A.cpp(çünkü Bhala Ayöntemler içinde gerekli ).
Ama A.hiçerir B.h, derlenmiş dört derleme zamanlar- B.cpp, A.cpp, C.cppve D.cppdaha sonra iki şimdi dolaylı dahil olarak B.hda.
Üstbilgi birden çok kez dahil edildiğinde, önişlemcinin her seferinde yine de okuması gerekir . Korumalar nedeniyle içeriğinin işlenmesini atlayacaktır #ifdef, ancak yine de onu okur ve muhafazanın sonunu araması gerekir, bu da içindeki tüm önişlemci yönergelerini ayrıştırması gerektiği anlamına gelir.
(Diğer cevapta belirtildiği gibi, önceden derlenmiş başlıklar bu soruna geçici bir çözüm bulmaya çalışır, ancak bunlar kendi solucan kutularıdır; temel olarak bunları sistem başlıkları için ve yalnızca çok fazla kullanmıyorsanız, ancak projenizdeki başlıklar)
vehicle.h,bus.h,toybus.h.vehicle.htarafından dahil etmekbus.hvebus.hdahil etmektoybus.h. eğer biraz değişiklik yaparsambus.h. derleyicivehicle.htekrar açılıp ayrıştırılıyor mu? tekrar derliyor mu?