Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Friend-Funktion – Wikipedia
Friend-Funktion – Wikipedia 👆 Click Here!
aus Wikipedia, der freien Enzyklopädie

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 zugegriffenen 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 | Quelltext bearbeiten]

Beispiel 1

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

Eine in der Praxis vorzuziehende Lösung wäre in diesem Beispiel eine Zugriffsfunktion.

#include <iostream>

class A {
private:
   int wert;
public:
   A() : wert(42) {}
   friend int main();
};

int main() {
   A a;

   std::cout << "A::wert = " << a.wert << std::endl;
}

Beispiel 2

In C++ können Operatoren überladen werden. So z. B. auch bei der Ausgabeoperator <<(ursprünglich logische Verschiebung). Wenn man eigene Datentypen implementiert, kann man durch Überladen dieses Operators die Ausgabe steuern. Dafür wird häufig der Zugriff auf private Member erfordert, die normalerweise für den Operator << nicht zugänglich sind.

Indem man den global überladenen Operator mit friend kennzeichnet, können jedoch auch private Attribute ausgegeben werden:

#include <iostream>
using namespace std;

class Zahl {
private:
    int m_zahl{20};
public:
    Zahl(){};
    Zahl(int zahl) : m_zahl(zahl){}

    friend ostream& operator<<(ostream &out, const Zahl &zahlObj){
        out << "Zahl: " << zahlObj.m_zahl;
        return out;
    }
};

int main(){
    Zahl zahl{5}
    cout << zahl << endl; //Ausgabe: Zahl: 5
}

Es ist zu beachten, dass, obwohl dieser Operator innerhalb der Klasse Zahl definiert ist, er eine freie Funktion darstellt, d. h. keine Memberfunktion der Klasse Zahl ist. Lässt man das Schlüsselwort friend weg, so wird operator<< zu einer Memberfunktion, was jedoch für dieses Beispiel zur Standardausgabe nicht sinnvoll wäre.

Friend-Klasse

[Bearbeiten | Quelltext 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 | Quelltext bearbeiten]
  • Bjarne Stroustrup: The C++ Programmierung Language. ISBN 978-0-201-88954-3.
  • Graham M. Seed: An Introduction to Object-Oriented Programmierung in C++. ISBN 978-1-85233-450-5.

Weblinks

[Bearbeiten | Quelltext bearbeiten]
  • C++ friend function tutorial bei CoderSource.net
  • C++ friendship and inheritance tutorial bei cplusplus.com
Abgerufen von „https://de.teknopedia.teknokrat.ac.id/w/index.php?title=Friend-Funktion&oldid=233132321“
Kategorien:
  • Objektorientierte Programmierung
  • Unterprogramm

  • indonesia
  • Polski
  • العربية
  • Deutsch
  • English
  • Español
  • Français
  • Italiano
  • مصرى
  • Nederlands
  • 日本語
  • Português
  • Sinugboanong Binisaya
  • Svenska
  • Українська
  • Tiếng Việt
  • Winaray
  • 中文
  • Русский
Sunting pranala
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022
Email: pmb@teknokrat.ac.id