C ++ projemde iki sınıfım var Particleve Contact. Olarak Particlesınıf, bir üye değişkeni olan std::vector<Contact> contactsbir bütün temas içeren Particlebir 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 Contactsınıfında, ben kurucusuna kodu eklemek istiyorum Contacto arayacak Particle::addContact(Contact cont)böylece contactsher ikisi için güncellenir Particlehangi arasındaki nesneler Contactnesne 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, NetworkN 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 Particlesı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 Networksınıf nesnesi tarafından bağlandığından , bağlantı bilgilerinin tamamen Networknesne 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 Networknesne 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) )?
Networkiç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. ParticleContact