2010-04-05 28 views
6

Tüm yapı ve sınıflar başlık dosyasında bildirilmelidir? Bir kaynak dosyasında bir struct/class bildirirsem, başka dosyalarda kullanılabilmesi için header dosyasına ne koymam gerekir? Ayrıca, orada C++ bazı standart uygulamaları gösteren herhangi bir kaynak var mı?Yapıları, vb. Bildirmek Nerede?

cevap

5

Tüm yapı ve sınıflar başlık dosyasında bildirilmelidir?
Evet. DÜZENLEME: Ama onların uygulamaları cpp dosyalarında olmalıdır. Bazen C# veya Java'dan gelen kullanıcılar C++ uygulamasındaki uygulamanın sınıf beyanından tamamen ayrı olabileceğini fark etmez.

Bir kaynak dosyasında bir yapı/sınıf bildirirsem, başka dosyalarda kullanılabilmesi için başlık dosyasına ne koymam gerekir?
Yapamazsınız. Derleyici, bu sınıfı kullanan herhangi bir çeviri biriminde bulunan bir sınıfın tam beyanına ihtiyaç duyar.

Ayrıca, orada bazı standart C++ uygulamalarını gösteren herhangi bir kaynak var mı?
Görmek için istediğiniz sayıda açık kaynaklı uygulama için kaynak indirebilirsiniz. Görmeniz gereken tek tamamen tutarlı olan şey, başlık muhafızlarını kullanmak ve tüm beyanları başlık dosyalarında tutmaktır.

+4

Başka bir kaynak dosyasında kullanmayla ilgili bir amaç yoksa bir yapının başlık dosyaları olması gerekmez. STL algoritması için yazılmış bir functor böyle bir örnektir. – Naveen

+3

Uygulama ayrıntıları olan çok sayıda yapı kullanıyorum - bunlar .cpp dosyalarında bildirildi. –

+1

-1 Naveen ve Neil, neden * ALL * yapılarının başlıklarda belirtilmemesinin nedenlerini verdiler. OP'nin sorularına evet, özellikle yeni başlayanlar için yanıltıcı bir cevap veriyor. –

2

Başlık dosyalarının tüm noktası, diğer kaynak dosyalarda paylaşılmak istenen arabirimlerin bildirilmesidir. Çoğu zaman, insanlar başlık dosyalarında soyut tipler bildirir ve bunları gerektiği gibi kaynak dosyalarına uygularlar. Bu, elbette, yeni uygulanan tipin sadece o kaynak dosya için mevcut olacağı anlamına gelir. Birden fazla dosyada bir tür kullanmanız gerekiyorsa (ki bu genellikle böyle olur), daha sonra başlık dosyalarını kullanmanız gerekir. En iyi uygulamalar için genellikle harika bir kaynaktır.