Kita dapat mengakses variabel pribadi dari kelas lain ketika kita mendefinisikan copy atau memindahkan konstruktor. Apakah C ++ membuat mereka friend
satu sama lain secara otomatis?
Sebagai contoh:
my_str::my_str(my_str&& m)
{
size_ = m.size_; //accessing private variable another my_str class
buff_ = m.buff_; //accessing private variable another my_str class
m.buff_ = nullptr;
m.size_ = 0;
}
c++
friend-class
redkont
sumber
sumber
Jawaban:
Itu tidak dianggap sebagai teman, tapi ya, fungsi anggota kelas apa pun
my_str
dapat mengakses anggota pribadi dari semua jenis contohmy_str
, bukan hanyathis
instance:Gagasan umum di balik itu adalah untuk memungkinkan 2 atau lebih objek dari jenis yang sama untuk berinteraksi tanpa harus mengekspos anggota pribadi mereka.
sumber
Fungsi anggota dari kelas itu sendiri selalu memiliki akses ke
private
anggota, tidak peduli apakah fungsi anggota didefinisikan di dalam kelas atau di luar kelas dan tidak peduli apakah itu merupakan fungsi anggota khusus seperti copy / move constructor.Karena itu mereka bukan
friend
dari kelas, karena itu tidak masuk akal. Mereka sudah menjadi bagian dari kelas. Tetap, mereka memiliki akses ke semuaprivate
anggota, bukan karena mereka adalah anggotafriend
, tetapi karena mereka adalah bagian dari kelas.Jika tidak mungkin menginisialisasi anggota dalam konstruktor (karena mereka tidak dapat diakses), maka seluruh konsep aksesibilitas anggota tidak akan ada gunanya. (Bagaimana Anda menginisialisasi anggota?)
Selain itu, aksesibilitas bukanlah masalah objek yang diakses anggota. Aksesibilitas adalah masalah hanya di mana dalam kode nama (nama anggota) digunakan. Jika suatu fungsi dapat mengakses anggota dari satu instance kelas, maka itu juga dapat mengakses anggota instance lain dari kelas yang sama.
sumber