friends - Ausnahmen von der Verkapselung

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.