Wann sollten Sie die Verwendung von 'Freund' in C++?
Habe ich gelesen, durch die C++ - FAQ und war neugierig auf die Freund
Erklärung. Ich persönlich habe es nie benutzt, aber ich bin interessiert in der Erforschung der Sprache.
Was ist ein gutes Beispiel für die Nutzung friend
?
Lesen der FAQ ein bisschen länger, ich mag die Idee des <<
>>
operator überladen und das hinzufügen als Freund dieser Klassen. Aber ich bin nicht sicher, wie dieser nicht bricht Kapselung. Wann kann man diese Ausnahmen bleiben in der strenge, die ist OOP?
InformationsquelleAutor der Frage |
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstens (IMO) nicht auf Leute hören die sagen
friend
ist nicht sinnvoll. IST es nützlich. In vielen Situationen werden Sie Objekte mit Daten oder Funktionen, die nicht dafür vorgesehen sind, öffentlich zugänglich sein. Dies gilt insbesondere für große codebase mit vielen Autoren, die vielleicht nur oberflächlich vertraut mit den verschiedenen Bereichen.Gibt es alternativen, um den Freund Planer, aber oft sind Sie umständlich (cpp-Ebene konkrete Klassen/maskiert typedefs) oder nicht sicher (Kommentare oder Funktion Namen-Konventionen).
Auf die Antwort;
Den
friend
Planer ermöglicht es der jeweiligen Klasse Zugriff auf geschützte Daten oder Funktionen innerhalb der Klasse machen, die Freund-Anweisung. Zum Beispiel in dem folgenden code kann jeder bitten Sie ein Kind, für Ihren Namen, sondern nur die Mutter und das Kind kann den Namen ändern.Können Sie nehmen Sie dieses einfache Beispiel weiter durch die Berücksichtigung einer komplexeren Klasse wie ein Fenster. Sehr wahrscheinlich ein Fenster haben viele Funktionen/Daten-Elemente, die sollte nicht öffentlich zugänglich sein, aber benötigt WERDEN, durch eine Verwandte Klasse wie ein WindowManager.
InformationsquelleAutor der Antwort Andrew Grant
Bei der Arbeit wir verwenden Freunde zum testen von codeausgiebig. Es bedeutet, dass wir die richtige Kapselung und information hiding für die wichtigsten Anwendungs-code. Aber auch wir können den separaten test-code, der verwendet Freunde zu inspizieren internen Zustand und Daten für Tests.
Genügt zu sagen, ich würde nicht mit dem Freund Schlüsselwort als ein wesentlicher Bestandteil Ihres Entwurfs.
InformationsquelleAutor der Antwort Daemin
Den
friend
keyword hat eine Reihe von guten verwendet. Hier sind die beiden Verwendungen sofort sichtbar zu mir:Freund Definition
Freund definition erlaubt das definieren einer Funktion im Gültigkeitsbereich der Klasse, aber die Funktion nicht definiert werden, wie eine member-Funktion, sondern als eine freie Funktion des umschließenden namespace, und nicht sichtbar, mit Ausnahme von der Regel für das argument dependent lookup. Das macht es besonders nützlich für die operator-überladung:
Private CRTP Basisklasse
Manchmal, finden Sie die Notwendigkeit, dass die Politik Zugriff auf die Bedürfnisse der abgeleiteten Klasse:
Finden Sie eine nicht erfundene Beispiel für die, die in diese Antwort. Einen anderen code verwenden, der in diese Antwort. Die CRTP-Basis wirft seinen this-Zeiger, um Zugriff auf die Daten-Felder der abgeleiteten Klasse, die mit Daten-member-Zeiger.
InformationsquelleAutor der Antwort Johannes Schaub - litb
@roo: Verkapselung ist nicht gebrochen, weil hier die Klasse selbst bestimmt, wer Zugriff auf deren private member. Die Kapselung würde nur gebrochen werden, wenn diese verursacht werden könnten, die von außerhalb der Klasse, z.B. wenn Ihr
operator <<
würde verkünden "ich bin ein Freund der Klassefoo
."friend
ersetzt die Verwendung vonpublic
nicht vonprivate
!Eigentlich, der C++ FAQ Antworten zu diesem bereits.
InformationsquelleAutor der Antwort Konrad Rudolph
Das kanonische Beispiel ist die überlastung operator<<. Eine weitere gebräuchliche Anwendung ist es, ein Helfer oder admin-Klasse den Zugang zu Ihren Interna.
Hier sind ein paar Richtlinien, die ich gehört habe über C++ - Freunde. Die Letzte ist besonders in Erinnerung.
InformationsquelleAutor der Antwort Mark Harrison
Wie würden Sie es brechen Kapselung?
Brechen Sie die Kapselung, wenn Sie erlauben uneingeschränkte Zugriff auf ein Datenelement. Betrachten Sie die folgenden Klassen:
c1
ist offensichtlich nicht gekapselt. Jeder kann Lesen und ändernx
. Wir haben keine Möglichkeit, zu erzwingen, jede Art von access control.c2
ist natürlich gekapselt. Es gibt keine öffentlichen Zugang zux
. Alles, was Sie tun können, ist rufen Sie diefoo
- Funktion, die führt einige sinnvolle operation auf der Klasse.c3
? Ist, dass weniger gekapselt? Ist die Möglichkeit einer uneingeschränkten Zugang zux
? Erlaubt es, unbekannte Funktionen zugreifen?Nicht. Es ermöglicht präzise eine Funktion, die Zugriff auf private Mitglieder der Klasse. Wie
c2
haben. Und genau wiec2
die eine Funktion, die Zugriff hat, ist nicht "einige zufällige, unbekannte Funktion", sondern "die Funktion aufgeführt, die in der definition der Klasse". Wiec2
wir sehen können, einfach durch einen Blick auf die Klasse Definitionen, eine komplette Liste, wer Zugriff hat.Also wie genau ist diese weniger gekapselt? Die gleiche Menge an code hat Zugriff auf die privaten Elemente der Klasse. Und jederder Zugang hat aufgeführt ist in der definition der Klasse.
friend
nicht bricht Kapselung. Es macht einige Java-Menschen, Programmierer fühlen sich unwohl, weil, wenn Sie sagen, "OOP", die Sie tatsächlich bedeuten "Java". Wenn Sie sagen, "Kapselung", meinen Sie nicht, dass "private Mitglieder müssen geschützt werden, vor willkürlichen Zugriffen", aber "eine Java-Klasse, wo die einzigen Funktionen, die Zugriff auf private member, sind die Schüler", obwohl das völliger Blödsinn ist aus mehreren Gründen.Zunächst wird, wie bereits gezeigt, ist es zu beschränken. Es gibt keinen Grund, warum friend-Methoden nicht erlaubt werden sollte, das gleiche zu tun.
Zweite, es ist nicht restriktiv genug. Betrachten Sie eine vierte Klasse:
Diese, entsprechend der oben erwähnten Java-Mentalität, ist vollkommen gekapselt.
Und doch erlaubt es das absolut jeder Lesen und ändern von x. Wie funktioniert das sogar Sinn machen? (Tipp: Es muss nicht)
Bottom line:
Kapselung ist über die Möglichkeit zu Steuern, welche Funktionen kann der Zugriff auf private Mitglieder. Es ist nicht über genau dort, wo die Definitionen dieser Funktionen befinden.
InformationsquelleAutor der Antwort jalf
Andere bekannte version von Andrew ' s Beispiel, der gefürchteten code-couplet
Anstatt sich zu sorgen, wenn beide Linien sind immer zusammen getan und in gleichbleibender Reihenfolge die man machen konnte private Methoden und eine friend-Funktion, um Konsistenz sicherzustellen:
In anderen Worten: Sie halten die öffentlichen Schnittstellen kleiner und erzwingen von Invarianten, die quer durch Klassen und Objekte in Freund-Funktionen.
InformationsquelleAutor der Antwort maccullt
Steuern Sie die Zugriffsrechte für die Mitglieder und Funktionen verwenden Private/Protected/Public Recht?
vorausgesetzt, die Idee der jede und jeder dieser 3 Ebenen ist klar, dann sollte es klar sein, dass wir etwas verpassen...
Die Erklärung von einem Mitglied/Funktion geschützt ist, ist zum Beispiel ziemlich allgemein. Sagen Sie, daß diese Funktion ist außerhalb der Reichweite für jeder (außer für eine geerbte Kind natürlich). Aber was ist mit Ausnahmen? jedes Sicherheits-system, können Sie haben eine Art "weiße Liste", richtig?
So Freund können, haben Sie die Flexibilität, solide Objekt in isolation, sondern erlaubt für ein "Schlupfloch" geschaffen werden, für Dinge, die Sie fühlen, sind gerechtfertigt.
Ich denke, die Leute sagen es ist nicht nötig, weil es immer ein design, das zu tun, ohne es. Ich denke, es ist ähnlich wie die Diskussion von globalen Variablen: Sie sollten nie, Es gibt immer einen Weg, das zu tun ohne Sie... aber in der Realität, Sie die Fälle sehen, wo das endet als die (fast) die meisten elegante Art und Weise... ich denke, das ist der gleiche Fall mit Freunden.
nun, das ist nicht genau die Art und Weise, es zu betrachten.
Die Idee ist, zu kontrollieren, WER Zugang zu was, haben oder nicht Einstellung Funktion hat das wenig zu tun.
InformationsquelleAutor der Antwort csmba
Fand ich die praktische Ablage zu verwenden Freund Zugriff: Unittest von privaten Funktionen.
InformationsquelleAutor der Antwort
Freund kommt praktisch, wenn Sie den Aufbau einer container und Sie möchten, implementieren Sie einen iterator für die Klasse.
InformationsquelleAutor der Antwort rptony
Die kurze Antwort wäre: verwenden Sie Freundwenn es tatsächlich verbessert Kapselung. Die Verbesserung der Lesbarkeit und usability (Betreiber << und >> sind das Paradebeispiel) ist auch ein guter Grund.
Als Beispiele für die Verbesserung der Kapselung, Klassen, die speziell zur Arbeit mit den Interna von anderen Klassen (test-Klassen in den Sinn kommen) sind gute Kandidaten.
InformationsquelleAutor der Antwort Gorpik
Dem Erfinder von C++ sagt, dass ist nicht Broker jeder encapsulation-Prinzip, und ich zitiere ihn:
Ist mehr als klar...
InformationsquelleAutor der Antwort
Hatten wir ein Interessantes Thema gekommen, bis bei einer Firma, bei der ich zuvor arbeitete, wo wir verwendet, Freund anständig zu beeinflussen. Ich arbeitete in unserem framework-Abteilung erstellt einen basic-engine-Niveau-system über unsere custom OS. Wir hatten eine Klasse-Struktur:
Alle diese Klassen waren Teil des Rahmens und betreut durch unser team. Die Spiele, die von der Firma produziert wurden aufbauend auf diesem framework ableiten aus einem der Spiele für Kinder. Das Problem war, dass Spiel hatte Schnittstellen zu verschiedenen Dingen, die SinglePlayer-und TwoPlayer benötigten Zugang zu, aber das wollten wir nicht aussetzen außerhalb der framework-Klassen. Die Lösung war, um die Schnittstellen privaten und erlauben TwoPlayer-und SinglePlayer-Zugang zu Ihnen, die über Freundschaft.
Wahrheitsgemäß diese ganze Angelegenheit konnte gelöst worden, indem eine bessere Umsetzung unseres Systems, aber wir waren eingesperrt in dem, was wir hatten.
InformationsquelleAutor der Antwort Ray
Andere Verwendung: Freund (+ virtuelle Vererbung) kann verwendet werden, um zu vermeiden, die sich aus einer Klasse (aka: "machen Sie eine Klasse underivable") => EinsZwei
Vom Zwei:
InformationsquelleAutor der Antwort Gian Paolo Ghilardi
Tun TDD viele Male, die ich verwendet habe, 'Freund' Schlüsselwort in C++.
Kann ein Freund alles über mich wissen?
Aktualisiert: ich fand diese wertvollen Antwort zum Thema "Freund" - Schlüsselwort aus Bjarne Stroustrup Website.
InformationsquelleAutor der Antwort popopome
Hinblick auf operator<< und-operator>> es gibt keinen guten Grund, um diese Operatoren Freunde. Es ist wahr, dass Sie sollten nicht werden member-Funktionen, aber Sie müssen nicht Freunde sein, entweder.
Das beste, was zu tun ist, erstellen Sie öffentliche print(ostream&) und read(istream&) - Funktionen. Dann schreiben Sie den operator<< und-operator>> in Bezug auf diese Funktionen. Dies bietet den zusätzlichen Vorteil, dass Sie um jene Funktionen, die virtuellen, die eine virtuelle Serialisierung.
InformationsquelleAutor der Antwort
Bin ich nur mit dem Freund-Stichwort unittest geschützten Funktionen. Einige werden sagen, dass Sie sollten nicht test-geschützt-Funktionalität. Ich finde aber, diese sehr nützliches Werkzeug, wenn neue Funktionen Hinzugefügt werden.
Aber ich glaube nicht, verwenden Sie das Schlüsselwort direkt in die Klasse Erklärungen, stattdessen verwende ich eine nette Vorlage-hack dies zu erreichen:
Dies ermöglicht es mir, Folgendes zu tun:
Funktioniert auf GCC und MSVC atleast.
InformationsquelleAutor der Antwort larsmoa
Müssen Sie sehr vorsichtig sein, wenn/, wo Sie mit den
friend
Schlüsselwort, und, wie Sie, ich habe es sehr selten. Im folgenden sind einige Hinweise zur Verwendungfriend
und die alternativen.Lassen Sie uns sagen, Sie wollen den Vergleich von zwei Objekten, um zu sehen, ob Sie gleich sind. Sie können entweder:
Das problem bei der ersten option ist, dass könnte eine MENGE Zugriffsmethoden, die (etwas) langsamer als direct variable access, schwerer zu Lesen und zu umständlich. Das problem mit dem zweiten Ansatz ist, dass Sie vollständig zu brechen Kapselung.
Schön wäre es, wenn wir definieren eine externe Funktion, die könnte immer noch Zugriff auf die privaten Elemente einer Klasse. Wir können dies tun, mit der
friend
Stichwort:Die Methode
equal(Beer, Beer)
jetzt direkten Zugang zua
undb
's private Mitglieder (die kannchar *brand
float percentAlcohol
usw. Dies ist eine eher gekünstelt Beispiel, würden Sie früher anwendenfriend
auf einen überladenen== operator
aber dazu kommen wir.Einige Dinge zu beachten:
friend
ist NICHT eine member-Funktion der Klassepublic
!)Ich nur wirklich nutzen
friends
wenn es ist viel schwieriger, es zu tun die andere Weise. Als ein weiteres Beispiel, viele Vektor-Mathematik-Funktionen werden oft erstellt, wiefriends
aufgrund der Interoperabilität derMat2x2
Mat3x3
Mat4x4
Vec2
Vec3
Vec4
etc. Und es ist einfach so viel einfacher, Freunde zu sein, anstatt zu verwenden Accessoren überall. Wie wies darauf hin,friend
ist oft nützlich, wenn angewandt, um die<<
(sehr nützlich zum Debuggen),>>
und vielleicht die==
Betreiber, kann aber auch verwendet werden, für so etwas wie dieses:Wie gesagt, ich glaube nicht, verwenden
friend
sehr oft an, aber jedes jetzt und dann ist es genau das, was Sie brauchen. Hoffe, das hilft!InformationsquelleAutor der Antwort
Den Baum-Beispiel ist ein ziemlich gutes Beispiel :
Ein Objekt implementiert, in ein paar anderen Klasse ohne
mit einer erbschaft, Beziehung.
Vielleicht könnten Sie auch brauchen, um über einen Konstruktor verfügen, geschützt und Kraft
Menschen verwenden Ihr "Freund" Fabrik.
... Ok, Gut, ehrlich gesagt man kann auch ohne Leben.
InformationsquelleAutor der Antwort fulmicoton
Nein, es ist nur eine eine Art Freundschaft :`(
InformationsquelleAutor der Antwort roo
Einer bestimmten Instanz wo ich
friend
ist, ist die Erstellung Singleton Klassen. Diefriend
Stichwort erlaubt mir, erstellen Sie eine accessor-Funktion, die ist übersichtlicher als immer mit einem "GetInstance()" Methode der Klasse.InformationsquelleAutor der Antwort Matt Dillard
Friend-Funktionen und Klassen ermöglichen den direkten Zugriff auf private und protected-Elemente der Klasse, um zu vermeiden, bricht die Kapselung im Allgemeinen Fall. Die meisten Nutzung ist mit ostream: wir möchten in der Lage sein, um Typ:
Jedoch, dieser kann verlangen, Zugriff auf die privaten Daten der Punkt, so definieren wir den überladenen operator
Gibt es offensichtlich Kapselung Auswirkungen, jedoch. Erste, jetzt die friend-Klasse oder-Funktion hat vollen Zugriff auf ALLE member der Klasse, sogar diejenigen, die nicht beziehen sich auf deren Bedürfnisse. Zweitens, die Implementierungen von der Klasse und der Freund sind jetzt verstrickt ist, zu dem Punkt, wo eine interne Veränderung in der Klasse brechen kann und der Freund.
Wenn Sie die Freundin als eine Erweiterung der Klasse, dann ist dies nicht ein Problem, logisch gesehen. Aber, in diesem Fall, warum war es notwendig, separate aus dem Freund in den ersten Platz.
Das gleiche zu erreichen, dass die 'Freunde' behaupten zu erzielen, aber ohne zu brechen Verkapselung, kann man dies tun:
Kapselung ist nicht gebrochen, Klasse B hat keinen Zugriff auf die interne Implementierung in Einer, aber das Ergebnis ist das gleiche, als wenn wir erklärt hatten, dass B ein Freund von A.
Der compiler optimieren wird, entfernt die Funktion Aufrufe, so wird diese Folge in der gleichen Anweisungen, die einen direkten Zugang.
Ich denke, mit 'Freund' ist einfach eine Verknüpfung mit wohl Vorteil, aber definitiv Kosten.
InformationsquelleAutor der Antwort
In C++ "Freund" Schlüsselwort ist nützlich, in-Operator überladen und Machen die Brücke.
1.) Friend-Schlüsselwort operator überladen :
Beispiel zur operator-überladung: Lassen Sie uns sagen, wir haben eine Klasse "Punkt", die zwei float-Variablen
"x"(für x-Koordinate) und "y"(für y-Koordinate). Jetzt haben wir, um eine überlastung
"<<"
(extraction operator), so dass, wenn wir rufen"cout << pointobj"
dann wird es drucken Sie x-und y-Koordinate (wo pointobj ist ein Objekt der Klasse Punkt). Zu diesem Zweck haben wir zwei option:Nun die Erste option ist nicht gut, weil wenn wir brauchen, um überlastung wieder diese Betreiber für einige andere Klasse, dann müssen wir wieder ändern in "ostream" - Klasse.
Das ist, warum die zweite ist die beste option. Jetzt für den compiler-Aufruf
"operator <<()"
Funktion:Beacause wir umgesetzt haben, ist eine überlastung in der Point-Klasse. So, um diese Funktion aufrufen, ohne ein Objekt fügen wir
"friend"
Stichwort, da können wir rufen Sie einen Freund-Funktion ohne Objekt.Jetzt Funktionsdeklaration werden:
"friend ostream &operator<<(ostream &cout, Point &pointobj);"
2.) Friend-Schlüsselwort bei der Herstellung bridge :
Nehmen wir an, wir haben eine Funktion, in dem wir Zugriff auf private member von zwei oder mehr Klassen ( im Allgemeinen bezeichnet als "Brücke" ) .
Wie Sie dies tun:
Zugriff auf private member einer Klasse sollte es sein, Mitglied dieser Klasse. Nun, um Zugriff auf private member einer anderen Klasse jede Klasse sollte erklären, dass die Funktion als friend-Funktion. Zum Beispiel :
Angenommen, es gibt zwei Klassen A und B. Eine Funktion
"funcBridge()"
will Zugriff auf private member der beiden Klassen. Dann sind beide Klasse sollte erklären"funcBridge()"
:friend return_type funcBridge(A &a_obj, B & b_obj);
Ich denke, das würde helfen zu verstehen, friend-Schlüsselwort.
InformationsquelleAutor der Antwort
Als Referenz für friend-Deklaration sagt:
Also nur als Erinnerung, gibt es technische Fehler in einigen der Antworten, die sagen, dass
friend
kann nur besuchen geschützt Mitglieder.InformationsquelleAutor der Antwort
Bei der Umsetzung Baum-algorithmen für die Klasse, die framework-code, der prof gab uns hatte die tree-Klasse als Freund von der Knoten-Klasse.
Ist es nicht eigentlich etwas gutes tun, anderes als Sie Zugriff auf eine member-variable ohne Verwendung eines setting-Funktion.
InformationsquelleAutor der Antwort Ryan Fox
Können Sie verwenden, Freundschaft, wenn unterschiedliche Klassen (nicht die Erben einer von den anderen), sind mit private oder protected-Elemente der anderen Klasse.
vom http://www.cplusplus.com/doc/tutorial/inheritance/ .
Können Sie sehen, dieses Beispiel, in dem nicht-member-Methode greift auf die private-Elemente einer Klasse. Diese Methode hat erklärt, in diesem sehr Klasse als friend der Klasse.
InformationsquelleAutor der Antwort
Wahrscheinlich habe ich etwas verpasst aus den Antworten oben, aber ein weiteres wichtiges Konzept in der Kapselung ist das verbergen der Implementierung. Verringerung der Zugriff auf private Daten von Mitgliedern (die details der Implementierung einer Klasse) ermöglicht eine wesentlich einfachere Modifikation des Codes später. Wenn ein Freund greift direkt auf die privaten Daten, werden alle änderungen an der Implementierung Datenfelder (private Daten), brechen Sie den code, die Zugriff auf diese Daten. Die Verwendung von access-Methoden, die meist eliminiert. Ziemlich wichtig, würde ich denken.
InformationsquelleAutor der Antwort
Dies kann nicht sein, eine tatsächliche use-case-situation, sondern kann helfen, zu veranschaulichen, die Verwendung von Freund zwischen den Klassen.
Clubhaus
Die Mitglieder der Klasse
Annehmlichkeiten
Wenn man sich die Beziehungen dieser Klassen hier; das Clubhaus hält eine Vielzahl von verschiedenen Arten von Mitgliedschaften und die Mitgliedschaft Zugang. Die Mitglieder sind alle abgeleitet von einer super-oder Basisklasse, da Sie alle teilen eine ID und einen Aufzählungstyp, die Häufig sind und außerhalb von Klassen, Zugriff auf Ihren IDs und-Typen in access-Funktionen, die in der Basisklasse.
Jedoch durch diese Art der Hierarchie der Mitglieder und deren Abgeleiteten Klassen und deren Beziehung mit dem Clubhaus-Klasse die einzige, die von der abgeleiteten Klasse mit "besonderen Privilegien" ist der VIPMember-Klasse. Die Basisklasse und die anderen 2 abgeleiteten Klassen keinen Zugriff auf das Clubhaus der joinVIPEvent () - Methode, noch die VIP-Member-Klasse hat das Privileg, als ob es hat vollen Zugriff auf das Ereignis.
Also mit der VIPMember und das Clubhaus es ist ein zwei-Wege-Strasse für den Zugang, wo die andere Member-Klassen beschränkt sind.
InformationsquelleAutor der Antwort
Du könnte Einhaltung der strengsten und reinsten OOP Prinzipien und sicherzustellen, dass keine Daten-member für jede Klasse, die haben sogar Accessoren so, dass alle Objekte muss die einzigen, die wissen können, über Ihre Daten mit der einzige Weg, um nach Ihnen zu handeln, ist durch indirekte NachrichtenD. H., Methoden.
Aber auch C# hat einen internen Sichtbarkeit, keyword-und Java hat seine Standard - Paket Ebene Zugänglichkeit für einige Dinge. C++ kommt tatsächlich näher an der OOP ideal durch minimizinbg der Kompromiss von Sichtbarkeit in einer Klasse durch Angabe genau die andere Klasse und nur anderen Klassen sehen konnte.
Ich nicht wirklich mit C++, aber wenn C# hatte Freunds möchte ich, dass anstelle der Montage-global internen modifier, die ich eigentlich verwenden Sie eine Menge. Es ist nicht wirklich Pause incapsulation, weil die Einheit der Bereitstellung .NET ist einer Baugruppe.
Aber es gibt auch die InternalsVisibleToAttribut(otherAssembly), die wirkt wie ein cross-assembly Freund Mechanismus. Microsoft verwendet diese für visual designer Baugruppen.
InformationsquelleAutor der Antwort Mark Cidade
Freunde sind auch nützlich für die Rückrufe. Sie konnte Rückrufe implementieren wie statische Methoden
wo
callback
AnrufelocalCallback
intern, und dieclientData
hat Ihre Instanz. Meiner Meinung nach,... oder
Was dies ermöglicht, ist für den Freund zu sein, einen definierten, rein in die cpp als c-style-Funktion, und nicht Krempel in die Klasse.
Ebenso ein Muster, die ich gesehen habe sehr oft ist, um alle wirklich private Mitglieder einer Klasse in eine andere Klasse, die ist deklariert in der header-Definition in der cpp-und friended. Dies ermöglicht es dem Programmierer zu verbergen einiges der Komplexität und internen arbeiten der Klasse von dem Benutzer des headers.
In der Kopfzeile:
In der cpp,
Wird es einfacher, Dinge zu verbergen, dass der nachgeschaltete muss nicht sehen diese Weise.
InformationsquelleAutor der Antwort shash