Bu durumda iç içe sınıfları kullanmalı mıyım?

oy
42

Ben video oynatma ve kayıt için kullanılan sınıfların bir koleksiyon üzerinde çalışıyorum. Ben gibi yöntemlerle, kamu arayüzü gibi davranan bir ana sınıf var play(), stop(), pause(), record()vb ... Sonra video çözme ve video kodlama yapmak beygir sınıfları var.

Sadece C ++ iç içe sınıfların varlığını öğrendi ve ben programcılar bunları kullanma konusunda ne düşündüğünü merak ediyorum. Ben faydaları / dezavantajları nelerdir gerçekten emin biraz dikkatli ve değilim, ama böyle benim gibi durumlarda kullanılmak üzere (Okuduğum kitaba göre) görünmektedir.

Kitap benimki gibi bir senaryoda, iyi bir çözüm yuvasına arayüz sınıfının içindeki beygir sınıfları olacağını düşündürmektedir, bu nedenle istemci kullanımı ve olası bir ad çakışmasını önlemek anlamına gelmez sınıflar için ayrı dosyalar vardır? Bunları gerekçeleri hakkında bilmiyorum. İç içe sınıflar bana yeni bir kavramdır. Sadece programcılar konuda ne düşündüğünü görmek istiyorum.

Oluştur 02/08/2008 saat 03:51
kaynak kullanıcı
Diğer dillerde...                            


10 cevaplar

oy
25

Burada iç içe sınıfları kullanmak için biraz isteksiz olacaktır. Ne ön uç iş için arka uç şeyler (beygir) ve ayrı bir sınıf işlemek için bir "multimedya sürücü" için bir soyut temel sınıf oluşturduysam Ön uç sınıfı (uygun ortam tipi ve durum için) uygulanan bir sürücü sınıfı için bir işaretçi / referans almak ve beygir yapısına soyut işlemleri gerçekleştirebilir.

Benim felsefem sadece onlar tandem kullanılacak olacağı varsayımına göre, devam edin ve cilalı bir şekilde müşteriye hem yapılar erişilebilir hale getirmek olacaktır.

Ben böyle bir şey başvurmak QTextDocument Qt. Sen çıplak metal veri işleme doğrudan bir arayüz sağlar, ancak manipülasyon yapmak için bir QTextEdit gibi bir nesneye birlikte yetkisini geçmektedir.

Cevap 02/08/2008 saat 04:00
kaynak kullanıcı

oy
9

Sen ana sınıf uygulamak için gerekli olan minimum bir (küçük) yardımcı sınıf oluşturmak için iç içe geçmiş bir sınıf kullanmak. Ya da, örneğin, bir ara yüz (özet yöntemlerle bir sınıf) tanımlamak için kullanılır.

Bu durumda, iç içe sınıfların ana dezavantajı bu zor sonra yeniden kullanmak için sağlamasıdır. Belki de yeni bir proje içinde VideoDecoder sınıfını kullanmak istiyorum. Eğer VideoPlayer'a iç içe geçmiş bir sınıf yaparsanız, zarif bir şekilde bunu yapamaz.

Bunun yerine, daha sonra VideoPlayer sınıfında kullanabilirsiniz ayrı .h / .cpp dosyaları, diğer sınıfları koydu. VideoPlayer istemci artık yalnızca Siz uyguladıktan nasıl hakkında bilmek gerekmez hala VideoPlayer beyan dosyayı içermesi gerekir ve.

Cevap 17/09/2008 saat 12:50
kaynak kullanıcı

oy
5

İç içe sınıfları kullanmak karar vermeden bir yolu bu sınıf destekleyici bir rol oynar ya da kendi parçası olsun veya olmasın düşünmektir.

Başka bir sınıf yardımcı olması amaçlıdır varsa o zaman ben genellikle iç içe bir sınıf olun. Orada çelişkili görünüyor, bazıları buna uyarılar, bütün bir yük vardır ama tüm deneyim ve gut-duygu aşağı gelir.

Cevap 05/08/2008 saat 09:29
kaynak kullanıcı

oy
4

Eğer Arayüz sınıfta beygir sınıflara işaretçileri kullanmak ve parametre olarak tanıttığını veya arayüz yöntemlerinde türlerini dönmemesi halinde Eh, sadece (Arayüz başlık dosyasında bu çalışma atları için tanımlarını içermelidir gerek kalmayacak ileri) yerine bunları yayınlama. Bu şekilde, arayüzün kullanıcıların arka planda sınıfları hakkında bilmek gerekmez.

Kesinlikle bunun için yuva sınıfları gerekmez. Aslında, ayrı sınıf dosyaları aslında kod çok daha okunabilir ve proje büyüdükçe yönetmek daha kolay hale getirecektir. o da (farklı içerik / codec'i türleri için söylemek) daha sonra size alt sınıf gerekirse size yardımcı olacaktır.

İşte ilişkin daha fazla bilgi Pimpl deseni (bölüm 3.1.1).

Cevap 26/09/2008 saat 00:34
kaynak kullanıcı

oy
4

Biz yarı eski Güneş C ++ derleyici ve standart değişti davranış iç içe sınıfların görünürlüğü ile bir sorunu çarptı. Bu tabii ki, sizin iç içe sınıfı yapamaz için bir neden, eski derleyici dahil platformlarda bir sürü üzerinde yazılımı derlemeye planlıyorsanız farkında olmak sadece bir şey değildir.

Cevap 21/09/2008 saat 01:39
kaynak kullanıcı

oy
4

Bazen kullanıcıdan uygulama sınıfları gizlemek için uygun olan - bu durumlarda kamu sınıf tanımı içinde daha bir foo_internal.h koymak için daha iyidir. Bu şekilde, foo.h okuyucuları onlar değil rahatsız olanlar tercih yapardım görmez, ancak yine arayüzünün somut uygulamaların her karşı testler yazabilir.

Cevap 16/09/2008 saat 10:31
kaynak kullanıcı

oy
4

Kullanabileceğin bir durumda gibi geliyor strateji desen

Cevap 05/08/2008 saat 09:37
kaynak kullanıcı

oy
2

Eğer dış sınıfının kamu arayüz-olurdu kullanarak ayrı sınıf olarak uygulanması olamaz zaman yalnızca bir iç sınıfını kullanmalıdır. İç sınıflar onlar idareli kullanılması gerektiğini, böylece bir sınıfın büyüklüğü, karmaşıklığı ve sorumluluğu arttırmaktadır.

Daha iyi uyuyor gibi kodlayıcı / kod çözücü sınıfı sesleri Strateji Desen

Cevap 18/09/2008 saat 16:19
kaynak kullanıcı

oy
1

Akılda tutulması gereken bir diğer şey Hiç (böyle kod çözme ve kodlama gibi) iş fonksiyonlarının farklı uygulamaları öngörülüyor olup olmadığıdır. Bu durumda, kesinlikle işlevleri uygulamak farklı beton sınıfları ile bir soyut temel sınıf isterim. Gerçekten uygulamanın her türü için ayrı alt sınıf yuvasına uygun olmaz.

Cevap 23/09/2008 saat 20:07
kaynak kullanıcı

oy
1

Hiç swig (kullanarak kod kaydırmak niyetinde olmadığını iç içe sınıfları önlemek için bir nedeni olduğunu http://www.swig.org diğer diller ile kullanım için). Swig şu anda yüzden herhangi yuvalanmış sınıfları gerçek bir ağrı olur maruz kütüphaneler ile arabirim, iç içe sınıflar ile sorunları vardır.

Cevap 20/09/2008 saat 08:37
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more