Bisakah Anda menjelaskan kepada saya mengapa friend
kata kunci lebih disukai untuk memberikan hak akses ke data pribadi kelas?
Bisakah Anda menjelaskan kepada saya mengapa friend
kata kunci lebih disukai untuk memberikan hak akses ke data pribadi kelas?
Jawaban:
Teman adalah cara klasik untuk memperluas antarmuka kelas.
Tetapi yang hebat adalah bahwa teman secara eksplisit mendokumentasikan niat Anda untuk secara ketat mengikat item tertentu ke kelas.
Catatan: Dengan menggunakan teman Anda mengikat teman-teman ke kelas.
Contoh sempurna adalah operator streaming di C ++
class Plop
{
private:
int value;
friend std::ostream& operator<<(std::ostream& stream, Plop const& data);
friend std::istream& operator>>(std::istream& stream, Plop& data);
};
std::ostream& operator<<(std::ostream& stream, Plop const& data)
{
return stream << data.value << " ";
}
std::istream& operator>>(std::istream& stream, Plop& data)
{
return stream >> data.value;
}
Di sini kita memperluas antarmuka publik dari kelas Plop dengan cara yang memungkinkan kita untuk melakukan streaming objek masuk dan keluar dari aliran, tetapi tanpa memaparkan implementasi internal atau menyebabkan sakit kepala implementasi di masa depan dengan mengharuskan penggunaan metode get / set yang harus dipertahankan (karena mereka akan menjadi bagian dari antarmuka publik) bahkan jika implementasi internal diubah.
Catatan: Ini TIDAK memecah enkapsulasi tetapi ia mengikat dengan ketat operator stream ke implementasi kelas Plop (yaitu setiap perubahan pada implementasi kelas Plop akan membutuhkan perubahan pada implementasi operator stream). Tapi ini diharapkan. Semua bagian dari antarmuka publik (termasuk metode publik / terlindungi) terikat erat pada implementasi.
Tetapi Catatan: Anda telah secara eksplisit mendokumentasikan pengikatan ini sebagai bagian dari deklarasi kelas.
Catatan: Saya tidak akan menyebut teman sebagai cara yang disukai untuk mengekspos data pribadi. Penggunaan teman yang berlebihan bisa sama buruknya dengan mengekspos implementasi. Seperti semua fitur bahasa, itu harus digunakan dengan bijaksana.
friend
lebih disukai, cara lain apa yang biasanya Anda gunakan untuk mengakses data kelas privat dari luar?