C++-Programmierung/ Eigene Datentypen definieren/ Freunde

Aus Wikibooks

Wechseln zu: Navigation, Suche


[Bearbeiten] Freundschaft unter Klassen

Klassen können andere Klassen als Freunde betrachten. Wie im echten Leben sind diese Betrachtungen nicht immer beidseitig. Grundsätzlich gilt: Wenn eine Klasse eine andere Klasse als Freund betrachtet, darf diese Freund-Klasse auf die privaten Inhalte der Klasse zugreifen.

Crystal Clear app terminal.png
class Seite
{
        friend class Buch;
        unsigned int m_nRevision; // implizit privat
};

class Buch
{
public:
        Seite s19;
        void jetzt_testen(void)
        {
                test();
        }
private:
        void test(void)
        {
                s19.m_nRevision = 1;
        }
};

In diesem Beispiel sieht man eine solche Beziehung.

  • Buch darf auf die private Variable m_nRevision zugreifen.
  • Ein direkter Zugriff auf Seite::m_nRevision ist sogar nur von Buch aus möglich.
  • Die Methode Buch::test kann niemals direkt aufgerufen werden.

Folgende Verwendung dieser Klassen schlägt fehl:

Crystal Clear action button cancel.png
int main()
{
        Buch dasBuch;
        dasBuch.s19.m_nRevision = 9; // Kein Zugriff auf private Mitgliedsvariable von Seite
        return 0;
}
Crystal Clear action button cancel.png
class freundlich
{
        friend class Seite;
public:
        static void Seite_Rev_Setzen(Seite & s, unsigned int nRev)
        {
                s.m_nRevision = nRev;  // Kein Zugriff auf private Mitgliedsvariable von Seite

        }
};

int main()
{
        Seite dieSeite;
        freundlich::Seite_Rev_Setzen(dieSeite, 123);
        return 0;
}

Das letzte Beispiel zeigt die einseitige Freundschaftsbeziehung, der Klasse freundlich. Auch wenn Klasse freundlich eine andere Klasse als Freund betrachtet, heisst das nicht, dass diese Klasse eine gegenseitige Freundschaft eingeht.

Persönliche Werkzeuge