Können wir eine Friend-Funktion ohne Argument deklarieren?

7

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

aufrufen

wie:

%Vor%     
Dixit Singla 30.07.2013, 08:22
quelle

9 Antworten

3

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%     
A. H. 30.07.2013, 08:28
quelle
16

Ja, Sie können:

%Vor%

oder

%Vor%     
juanchopanza 30.07.2013 08:24
quelle
4

Natürlich können Sie ... hier einen Beispielcode finden . Um die Funktion inline zu definieren, müssen Sie den Parameter sample as verwenden, andernfalls funktioniert ADL nicht und der Compiler kann func nicht auflösen. Siehe Beispiel hier .

    
Asha 30.07.2013 08:26
quelle
3

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

    
Oleksiy 30.07.2013 08:26
quelle
2

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.

%Vor%     
Shumail Mohyuddin 30.07.2013 08:24
quelle
1

Es ist möglich , eine Freundin ohne Argumente zu haben. Es wird selten verwendet.

    
Mahesh 30.07.2013 08:28
quelle
1

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), ...)

    
Stefano Falasca 30.07.2013 08:26
quelle
0
%Vor%

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.

    
Karadur 30.07.2013 08:34
quelle
0

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.

%Vor%     
bkausbk 30.07.2013 08:54
quelle

Tags und Links