Apakah ada perbedaan antara mendeklarasikan fungsi / kelas teman sebagai privat atau publik? Sepertinya saya tidak dapat menemukan apa pun tentang ini secara online.
Maksud saya perbedaan antara:
class A
{
public:
friend class B;
};
dan
class A
{
private: //or nothing as the default is private
friend class B;
};
Apakah ada bedanya?
friend
kelas mengakses anggota yang dideklarasikanprivate
di kelas yang membuat deklarasi tersebut. Dalam kasus contoh ini, instance kelas B dapat mengakses anggota privat kelas AJawaban:
Tidak, tidak ada perbedaan - Anda cukup memberi tahu bahwa kelas B adalah teman kelas A dan sekarang dapat mengakses anggotanya yang pribadi dan dilindungi, itu saja.
sumber
friend
detail implementasi atau bagian dari antarmuka?class Friend
yang dapat mengakses semua anggota privat kelas saat ini.operator==(T, T)
menggunakan anggota data pribadiT
, dan menggunakanfriend
sebagai detail implementasi sehinggaoperator==
dapat muncul sebagai non-anggota. IMO, pertemanan ini tidak boleh muncul di antarmuka publik (seperti yang dihasilkan oleh Doxygen misalnya)Sejak sintaks
friend class B
tidak mendeklarasikan anggota kelasA
, sehingga tidak peduli di mana Anda menulis itu, kelasB
adalah teman kelasA
.Juga, jika Anda menulis
friend class B
diprotected
bagianA
, maka BUKAN berartiB
hanya dapat mengaksesprotected
danpublic
anggotaA
.Ingatlah selalu bahwa setelah
B
menjadi temanA
, ia dapat mengakses setiap anggotaA
, tidak peduli di bagian mana Anda menulisfriend class B
.sumber
Pernyataan teman muncul di badan kelas dan memberikan fungsi atau akses kelas lain ke anggota kelas pribadi dan dilindungi tempat pernyataan teman muncul.
Karena itu penentu akses tidak berpengaruh pada arti pernyataan teman (mereka dapat muncul secara pribadi: atau di bagian umum:, tanpa perbedaan).
sumber