Trotz der Vorteile der Verkapselung - nämlich daß man sicherstellen kann,
daß ein Objekt nur wie vom Programmierer vorgesehen verändert werden kann -
gibt es immer wieder das Bedürfnis bestimmte Ausnahmen zuzulassen. So könnte
es durchaus sinnvoll sein einer Bildschirmverwaltungsklasse die Möglichkeit
zu geben ein Grafikobjekt direkt auszugegen ohne den Umweg über eine
entsprechende Funktion, die noch allerlei Abfragen durchführt. Hierzu
ist es möglich die entsprechende Klasse als friend
der Klasse zu
definieren. Befreundete Klassen haben die gleichen Zugriffsrechte, wie
die Methoden der Klasse selber.
class grafikobjekt { friend class bildschirm; protected: // ... };
Bildschirm
kann jetzt auf alle Elemente und Methoden von grafikobjekt
zugreifen. Genauso ist es auch möglich nur einzelnen Funktionen (innerhalb
einer bestimmten Klasse oder ganz allgemein) Zugriffsrechte über eine
Freundschaftsbekundung zu geben:
class grafikobjekt { friend void bildschirm::zeichne(); friend ostream& operator<<(ostream& os, grafikobjekt& P); protected: // ... };Jetzt kann in der Klasse
bildschirm
ausschließlich die Funktion
zeichne()
auf alle Elemente und Methoden von grafikobjekt
zugreifen. Die gleichen Rechte besitzt auch der überladene Operator
operator<<
. Dieses Verfahren wird häufig benutzt.
Ein Beispiel ist im Kapitel über Operatoren zu finden.