John iyi bir tavsiye verir, ama burada Whys, wherefores ve istisnalarla ilgili biraz daha arka plandır. artan yapı süreleri ve dairesel bağımlılıkları kaçınma geliştirilmiş:
başlıklarını aktarmak başlıkları kaçınarak arkasında iki amacı vardır. Eğer B.h
içine A.h
ithalat ve C.h
içine B.h
içe aktarırsanız, o zaman A.h
şey değiştirmek her zaman, sen C.m
A.h
tanımlanan şeylerden herhangi birinin hiçbir kullanır bile C.m
yeniden derlemek zorunda. Bu, özellikle sık sık değişen başlıklara (gelişimin ilk aşamalarında yaygın olduğu gibi) sahipseniz, gerçekten korkunç ve gereksiz yapı karmaşasına yol açabilir.
İlk gol, ama utanç verici projeler için, kimin umurunda? Dört çekirdekli bir Pro'nuz var ve tam bir yapı birkaç dakika sürüyor, değil mi? Ama yine de ikinci sorun hakkında endişelenmeniz gerekiyor: Dairesel bağımlılıklar. A.h
başvuru sınıfı B
ve B.h
başvuru sınıfı A
. Bu aslında oldukça sık gerçekleşebilir ve oldukça masum bir sisteme girebilir. Bir koleksiyon nesnesi içerdiği nesnelerin türünü referans alabilir ve nesneler koleksiyon nesnesinin türüne başvuruda bulunabilir. Tek yapmanız gereken, bu türü alan veya döndüren bazı yöntemlerden kaynaklanmaktadır. Eğer diğer başlıkları ithal eden başlıklar varsa, bunun gerçekleşmesi ihtimali hızla birliğe yaklaşır. Yinelemeli içe aktarmalarla sona erer ve derleme zamanı hataları akıllara yol açabilir. "Ben , typdef tanımlandı biliyorum!İşte orada! Size bu başlığı ithal zaman henüz çözümlenen değildi! Ithal" Ama oluyor. Bu, yukarıda da hataya neden budur. Bu nedenle
, gerçi (çok yaklaşık kez inşa umurumda bile almak sahip siz), .... haricinde ... başlıklarını içine başlıkları ithal
Bazı başlıklar kaçınmalıdır. elbette senin üst sınıf. Dosyaları bir uygulamak @protocol
veya tanımlamak o typedef
kullanmak. Yani evet,
Ve sistem üstbilgileri hakkında ne var? ause churn, ve açıkçası, yinelemeli ithalata neden olmayacaklar, yani iyiler. Sistem üstbilgilerindeki öğeler için arkadaşlarınızın @class
ileri bildirimlerini kullanmasını engellerim. Hiçbir şey için başlık değerinizin kullanıcısı üzerinde ekstra çalışma yaratır. İyi bir başlık hijyeni için, lütfen < köşeli parantez içinde > ve başlıklarınızı "tırnak işaretleri" içine getirin.
Bu, önemsiz bir soru değil, basit bir kuraldır: her zaman derleyicinin size izin vereceği zaman kullanıcı başlıklarını diğer kullanıcı başlıklarına aktarmayı önlemek.
"typedef" ve "protokoller" hakkında ne var? – Joost
Bir öğretici veya bunu kullanan bir kod örneğini bilmek olmazdı? – gargantuan