C ++ projemde iki sınıfım var Particle
ve Contact
. Olarak Particle
sınıf, bir üye değişkeni olan std::vector<Contact> contacts
bir bütün temas içeren Particle
bir nesne ve karşılık gelen üye işlevlerini getContacts()
ve addContact(Contact cont)
. Bu nedenle, "Particle.h" içinde, "Contact.h" yi içerir.
In Contact
sınıfında, ben kurucusuna kodu eklemek istiyorum Contact
o arayacak Particle::addContact(Contact cont)
böylece contacts
her ikisi için güncellenir Particle
hangi arasındaki nesneler Contact
nesne ekleniyor. Bu nedenle, "Contact.cpp" içine "Particle.h" eklemem gerekir.
Benim sorum, bunun kabul edilebilir / iyi kodlama uygulaması olup olmadığıdır ve eğer değilse, elde etmeye çalıştığım şeyi uygulamak için daha iyi bir yol ne olacaktır (basitçe, yeni bir kişi olduğunda belirli bir parçacık için kişi listesini otomatik olarak güncelleme yaratıldı).
Bu sınıflar, Network
N parçacıkları ( std::vector<Particle> particles
) ve Nc kontakları ( std::vector<Contact> contacts
) olacak bir sınıf tarafından birbirine bağlanır . Ama ben particles[0].getContacts()
bu gibi Particle
sınıfta böyle fonksiyonlara sahip olmak için iyi mi , ya da bu durumda C ++ daha iyi bir ilişki "yapısı" var mı istedim (başka bir sınıfta kullanılan ilgili iki sınıf) .
Burada buna nasıl yaklaştığım konusunda bir perspektif değişikliğine ihtiyacım olabilir. İki sınıf bir Network
sınıf nesnesi tarafından bağlandığından , bağlantı bilgilerinin tamamen Network
nesne tarafından kontrol edilmesi tipik bir kod / sınıf organizasyonu mudur (bir Particle nesnesinin temaslarının farkında olmaması ve dolayısıyla bir getContacts()
üyesi olmaması gerekir) fonksiyonu). Daha sonra, belirli bir parçacığın hangi temas noktalarına sahip olduğunu bilmek için, bu bilgiyi Network
nesne aracılığıyla elde etmem gerekir (örn network.getContacts(Particle particle)
. Kullanarak ).
Bir Parçacık nesnesinin bu bilgiye sahip olması daha az tipik (belki de cesareti kırılmış) C ++ sınıf tasarımının da (yani, bilgiye ne olursa olsun - Ağ nesnesi veya Parçacık nesnesi aracılığıyla - hangisi daha uygun görünüyorsa) )?
Network
içeren bir sınıf nesneniz olduğunda tipik (belki de tercih edilen / teşvik edilen) yaklaşımı istiyorum . Bu temel bilgiyle, projeye devam ederken hala araştırılmakta / geliştirilmekte olan özel ihtiyaçlarıma uyup uymadığını değerlendirmeye çalışabilirim. Particle
Contact