Auch Klassen können Freunde haben. Wenn wir eine Funktion oder Klasse als Freund einer Klasse deklarieren, so dürfen Objekte dieser Klasse auch auf private Member zugreifen. Eine friend Bindung zwischen 2 Klassen ist deshalb eine sehr enge und soll somit soweit es geht vermieden werden.
#include<iostream>
using namespace std;
class Test
{
friend void friendFunktion(Test&);
//bzw: friend class friendClass;
private:
void geheim()
{
cout<<"streng geheim!\n";
}
};
void friendFunktion(Test& t)
{
t.geheim();
}
int main()
{
Test t;
//t.geheim(); //geht nicht, denn geheim() ist private
friendFunktion(t);
}
Freundschaft wird nicht vererbt. Wenn man bei abgeleiteten Klasse auch noch eine Freundschaft haben will, muss man die friend Deklarationen erweitern.