Gibt es einen Unterschied zwischen der Deklaration einer Freundfunktion / -klasse als privat oder öffentlich? Ich kann online anscheinend nichts darüber finden.
Ich meine den Unterschied zwischen:
class A
{
public:
friend class B;
};
und
class A
{
private: //or nothing as the default is private
friend class B;
};
Ist da ein Unterschied?
friend
Klasse auf die Mitglieder zugreifen kann, dieprivate
in der Klasse deklariert sind , die die Deklaration abgegeben hat. In diesem Beispiel kann eine Instanz der Klasse BAntworten:
Nein, es gibt keinen Unterschied - Sie sagen nur, dass Klasse B ein Freund von Klasse A ist und jetzt auf ihre privaten und geschützten Mitglieder zugreifen kann, das ist alles.
quelle
friend
ein Implementierungsdetail oder einen Teil der Schnittstelle in Betracht ziehen ?class Friend
die auf alle privaten Mitglieder der aktuellen Klasse zugreifen können.operator==(T, T)
mit privaten Datenelementen vonT
und verwenden diesefriend
als Implementierungsdetail, damitoperator==
sie als Nichtmitglied angezeigt werden können. IMO, diese Freundschaft sollte nicht in der öffentlichen Oberfläche erscheinen (wie zB von Doxygen generiert wird)Da die Syntax
friend class B
kein Mitglied der Klasse deklariertA
, spielt es keine Rolle, wo Sie sie schreiben, ist classB
ein Freund der KlasseA
.Wenn Sie
friend class B
inprotected
Abschnitt von schreibenA
, bedeutet dies NICHT, dassB
nurprotected
undpublic
Mitglieder von zugreifen könnenA
.Denken Sie immer daran, dass
B
ein Freund vonA
, auf den er schreibt, auf jedes Mitglied zugreifen kannA
, unabhängig davon, in welchem Abschnitt Sie schreibenfriend class B
.quelle
Die Freunddeklaration wird in einem Klassenkörper angezeigt und gewährt einer Funktion oder einer anderen Klasse Zugriff auf private und geschützte Mitglieder der Klasse, in der die Freunddeklaration angezeigt wird.
Als solche haben Zugriffsspezifizierer keinen Einfluss auf die Bedeutung von Freundesdeklarationen (sie können in privaten: oder öffentlichen: Abschnitten ohne Unterschied erscheinen).
quelle