Ist es möglich?
%Vor% friend
Funktion ohne Argument!
Meiner Meinung nach nicht möglich
Weil Freundfunktionen nicht "Mitglied" von Klassen sind Also können wir nicht mit dem Klassenobjekt
aufrufenwie:
%Vor% ja du kannst. Dafür kann es viele Gründe geben, wie zum Beispiel den Zugriff auf private statische Mitglieder oder eine globale Instanz von sample
. Es ist auch möglich, dass fun
eine Instanz von sample
erstellt und ihre privaten Dateien abruft.
Arbeitsbeispiel für das Erstellen von Instanzen und das Ausführen von Beispielen:
%Vor%Beispiel mit globaler Instanz:
%Vor%Beispiel mit privatem statischem Member:
%Vor%Es ist möglich, Friend-Funktionen ohne Argumente zu haben. Sie benötigen eine andere Möglichkeit, auf ein Objekt des Klassenmusters zuzugreifen. Vergessen Sie nicht, Friend-Funktionen ermöglichen Ihnen auch den Zugriff auf private statische Variablen des Klassenbeispiels, falls Sie das brauchen
Ja, aber für Variablen benötigen Sie sie dann global. Globales Objekt vom Typ sample
in Ihrem Fall. Oder erzeuge Objekt intern in Funktion in der Definition von fun()
wahrscheinlich.
Natürlich ist es möglich. Es scheint, dass Sie sich wundern, warum man das tun würde. Beispielsweise kann auf eine statische private Membervariable zugegriffen werden. Oder es kann auf private Mitglieder von Objekten zugreifen, die es auf irgendeine Weise erhält (Singleton, globale (Container von) Objekt (e), ...)
Das wird sowieso nicht funktionieren, weil "Freundschaft" in C ++ nur Zugangsbeschränkungen für private / geschützte Mitglieder aufhebt. Ein Freund ist kein Mitglied der Klasse, also kannst du s.fun () nicht aufrufen.
Sie können jedoch eine Friend-Funktion wie von Ihnen beschrieben deklarieren, und von dieser Funktion aus haben Sie Zugriff auf private Mitglieder der Beispielklasse.
Eine friend-Methode kann nützlich sein, da mit diesem Zugriff auf private / geschützte Datenelemente nur die angegebenen Methoden eingeschränkt sind. Ob diese Methode Argumente oder Rückgabetypen hat, spielt keine Rolle.
%Vor% Stellen Sie sich vor, es gibt eine Klasse CLinkedList, deren Methode find()
auf alle Datenelemente von CLinkedListNode zugreifen kann.
Tags und Links class c++ friend-function