Friend-Funktion

aus Wikipedia, der freien Enzyklopädie
(Weitergeleitet von Friend-Klasse)
Wechseln zu: Navigation, Suche

Unter einer Friend-Funktion oder Friend-Methode versteht man in der objektorientierten Programmierung eine Methode, Funktion oder Prozedur, der man erlaubt, auf private (private) oder geschützte (protected) Daten einer anderen Klasse zuzugreifen, auf die sie sonst keinen Zugriff hätte.

Ein solcher Zugriff widerspricht dem Paradigma der Datenkapselung, kann aber unter Umständen trotzdem sinnvoll sein. Dann wird die zugreifende Methode mit dem Schlüsselwort friend als ein „Freund“ der darauf zugegriffen Klasse deklariert. Sie hat dann nicht nur auf öffentliche (public) sondern auch auf geschützte (protected) oder private (private) Informationen in dieser Klasse Zugriff.

Diese Möglichkeit der Freundschaft sollte mit Bedacht genutzt werden, da dadurch die Datenkapselung abgeschwächt wird. Friend-Methoden sind ein Konzept der Programmiersprache C++. Jedoch gibt es ähnliche Möglichkeiten in anderen objektorientierten Programmiersprachen (zum Beispiel internal in C#).

Beispiele[Bearbeiten]

In diesem C++-Beispiel ist die Methode main() ein Freund der Klasse A. Sie kann deshalb auf das geschützte Attribut wert dieser Klasse zugreifen. Wäre sie nicht als Freund deklariert, wäre ein Zugriff nicht möglich und das Programm könnte auch nicht übersetzt werden.

#include <iostream>
 
class A {
protected:
   int wert;
 
public:
   A() : wert(42) {}
   friend int main();
};
 
int main() {
   A a;
 
   std::cout << "A::wert = " << a.wert << std::endl;
}

Friend-Klasse[Bearbeiten]

Anstelle einer Methode kann auch eine ganze Klasse als Freund einer anderen Klasse definiert werden. Dann kann jede Methode dieser Klasse auf alle privaten Informationen der anderen Klasse zugreifen.

class A
{friend class B;
};
 
class B
{void changeA(A &a) { a.a = b; }
};
 
int main()
{
    A a(100);
    B b(200);
    a.show(); // Gibt "a = 100" aus
    b.show(); // Gibt "b = 200" aus
    b.changeA(a);
    a.show(); // Gibt "a = 200" aus
    b.show(); // Gibt "b = 200" aus
}

Literatur[Bearbeiten]

Weblinks[Bearbeiten]