Biasanya dalam kecepatan pengembangan game C ++ dinilai lebih dari enkapsulasi, karena itu Anda melihat satu ton anggota kelas yang dapat diakses publik yang benar-benar tidak boleh publik.
Saya tampaknya menemukan dalam banyak kasus bahwa hanya beberapa klausa yang sangat terpilih yang benar-benar perlu mengetahui cara kerja kelas-kelas lain hingga mengubah atau membaca data pribadi mereka.
Membuat getter / setter publik untuk data pribadi ini memaparkan hal-hal yang sebenarnya tidak boleh dimodifikasi mau tak mau.
Akankah kompromi di sini adalah menggunakan kelas teman? atau ada beberapa kelemahan pada kelas teman yang tidak saya lihat.
sumber
Pilihan lain adalah menggunakan idiom PIMPL , di mana bagian dari implementasi struktur adalah pointer ke tipe lain. Sebagian besar pengguna kelas hanya akan menyertakan file header normal, di mana implementasinya adalah pointer buram. Kelas-kelas yang membutuhkan akses ke data pribadi dapat menyertakan header yang mendefinisikan tipe lain, dan menggunakan antarmuka yang disediakannya.
Ini pola umum untuk programmer C yang menginginkan fungsionalitas seperti teman. Menurut pendapat saya, ini juga lebih dekat pada pemikiran tentang pemisahan kekhawatiran (prinsip desain yang umumnya baik yang mengarah pada kode ortogonal yang dapat digunakan kembali) daripada enkapsulasi (teknik khusus OO yang berguna untuk menerapkan pemisahan kekhawatiran, tetapi juga sering disalahgunakan untuk terlalu rumit hal).
Ini memiliki keunggulan dibandingkan teman bahwa itu tidak memasangkan teman ke teman sama sekali. Beberapa orang mungkin mengklaim itu tidak menguntungkan, karena sekarang siapa pun dapat "berteman" dengan kelas Anda. Saya pikir itu adalah ketakutan yang tidak beralasan, karena Anda masih membuat hubungan eksplisit (dengan memasukkan tajuk). Jika Anda takut akan hal itu, Anda takut akan kemampuan Anda (atau rekan kerja) untuk membuat keputusan arsitektur yang cerdas. Tetapi jika Anda tidak bisa mengambil keputusan dengan benar nanti, mengapa Anda memercayai diri Anda sendiri
friend
sekarang?Ini memiliki kelemahan dari biaya runtime. Dengan menyimpan data dalam sebuah penunjuk, Anda memiliki koherensi cache yang lebih buruk dan jumlah alokasi yang lebih banyak, dan Anda juga membutuhkan destruktor untuk membersihkannya.
sumber