Wir können auf private Variablen einer anderen Klasse zugreifen, wenn wir Kopier- oder Verschiebungskonstruktoren definieren. Schafft C ++ sie friend
automatisch miteinander?
Zum Beispiel:
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
quelle
quelle
Antworten:
Es wird nicht als Freund betrachtet, aber ja, jede Mitgliedsfunktion der Klasse
my_str
kann auf private Mitglieder aller Instanzen des Typs zugreifenmy_str
, nicht nur auf diethis
Instanz:Die allgemeine Idee dahinter ist, zwei oder mehr Objekten des gleichen Typs die Interaktion zu ermöglichen, ohne ihre privaten Mitglieder aussetzen zu müssen.
quelle
Elementfunktionen der Klasse selbst haben immer Zugriff auf die
private
Elemente, unabhängig davon, ob die Elementfunktion in der Klasse oder außerhalb der Klasse definiert ist und ob es sich um eine spezielle Elementfunktion wie einen Kopier- / Verschiebungskonstruktor handelt.Deshalb gehören sie nicht
friend
zur Klasse, denn das macht keinen Sinn. Sie sind bereits Teil der Klasse. Trotzdem haben sie Zugriff auf alleprivate
Mitglieder, nicht weil siefriend
s sind, sondern weil sie Teil der Klasse sind.Wenn es nicht möglich wäre, Mitglieder in einem Konstruktor zu initialisieren (weil auf sie nicht zugegriffen werden kann), wäre das gesamte Konzept der Zugänglichkeit von Mitgliedern sinnlos. (Wie würden Sie das Mitglied initialisieren?)
Die Zugänglichkeit hängt auch in keiner Weise von dem Objekt ab, auf das auf ein Mitglied zugegriffen wird. Die Barrierefreiheit hängt nur davon ab, wo im Code ein Name (der Name des Mitglieds) verwendet wird. Wenn eine Funktion auf das Mitglied einer Instanz einer Klasse zugreifen kann, kann sie auch auf das Mitglied einer anderen Instanz derselben Klasse zugreifen.
quelle