Dalam proyek C ++ saya, saya punya dua kelas, Particle
dan Contact
. Di Particle
kelas, saya memiliki variabel anggota std::vector<Contact> contacts
yang berisi semua kontak dari suatu Particle
objek, dan fungsi anggota yang sesuai getContacts()
dan addContact(Contact cont)
. Jadi, dalam "Particle.h", saya memasukkan "Contact.h".
Di Contact
kelas, saya ingin menambahkan kode ke konstruktor untuk Contact
panggilan itu Particle::addContact(Contact cont)
, sehingga contacts
diperbarui untuk kedua Particle
objek di mana Contact
objek ditambahkan. Jadi, saya harus memasukkan "Particle.h" dalam "Contact.cpp".
Pertanyaan saya adalah apakah ini dapat diterima / praktik pengkodean yang baik dan, jika tidak, apa yang akan menjadi cara yang lebih baik untuk mengimplementasikan apa yang saya coba capai (sederhananya, secara otomatis memperbarui daftar kontak untuk partikel tertentu setiap kali kontak baru dibuat).
Kelas-kelas ini akan diikat bersama oleh Network
kelas yang akan memiliki N partikel ( std::vector<Particle> particles
) dan kontak Nc ( std::vector<Contact> contacts
). Tapi saya ingin dapat memiliki fungsi seperti particles[0].getContacts()
- apakah boleh memiliki fungsi seperti itu di Particle
kelas dalam kasus ini, atau apakah ada asosiasi "struktur" yang lebih baik di C ++ untuk tujuan ini (dari dua kelas terkait yang digunakan di kelas lain) .
Saya mungkin perlu perubahan perspektif di sini tentang bagaimana saya mendekati ini. Karena dua kelas dihubungkan oleh Network
objek kelas, apakah itu kode / kelas organisasi yang khas untuk memiliki informasi konektivitas sepenuhnya dikendalikan oleh Network
objek (di mana objek partikel tidak harus menyadari kontaknya dan, akibatnya, seharusnya tidak memiliki getContacts()
anggota fungsi). Kemudian, untuk mengetahui kontak apa yang dimiliki partikel tertentu, saya perlu mendapatkan informasi itu melalui Network
objek (misalnya, menggunakan network.getContacts(Particle particle)
).
Apakah itu kurang khas (bahkan mungkin berkecil hati) desain kelas C ++ untuk objek Partikel untuk memiliki pengetahuan itu, juga (yaitu, memiliki beberapa cara untuk mengakses informasi itu - baik melalui objek Jaringan atau objek Partikel, mana yang tampaknya lebih nyaman )?
Network
objek kelas yang berisi Particle
objek dan Contact
objek. Dengan pengetahuan dasar itu, saya kemudian dapat mencoba menilai apakah cocok atau tidak dengan kebutuhan spesifik saya, yang masih dieksplorasi / dikembangkan saat saya mengikuti proyek ini.