Dalam proyek C ++ saya, saya punya dua kelas, Particledan Contact. Di Particlekelas, saya memiliki variabel anggota std::vector<Contact> contactsyang berisi semua kontak dari suatu Particleobjek, dan fungsi anggota yang sesuai getContacts()dan addContact(Contact cont). Jadi, dalam "Particle.h", saya memasukkan "Contact.h".
Di Contactkelas, saya ingin menambahkan kode ke konstruktor untuk Contactpanggilan itu Particle::addContact(Contact cont), sehingga contactsdiperbarui untuk kedua Particleobjek di mana Contactobjek 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 Networkkelas 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 Particlekelas 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 Networkobjek kelas, apakah itu kode / kelas organisasi yang khas untuk memiliki informasi konektivitas sepenuhnya dikendalikan oleh Networkobjek (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 Networkobjek (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 )?
Networkobjek kelas yang berisi Particleobjek dan Contactobjek. 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.