Gibt es eine Möglichkeit, private Datenelemente einer C++ - Klasse in der cpp-Datei vor ihren Benutzern zu verbergen? Ich denke an die privaten Mitglieder als Teil der Implementierung und es scheint etwas rückwärts zu stehen, sie in der Header-Datei zu deklarieren.Private Datenmitglieder verstecken? (C++)
Antwort
Das "pimpl" Idiom ist, wie dies in der Regel behandelt wird.
Siehe
- http://www.gotw.ca/gotw/024.htm
- http://www.gotw.ca/gotw/028.htm
- http://herbsutter.com/gotw/_100/ (aktualisiert 11 C++)
Der klassische Weg, dies zu tun, ist mit einem Proxy-Zeiger auf eine interne Klasse, die implementiert die Funktionalität. Es gibt keine Möglichkeit, partielle Klassendefinitionen in C++ zu machen, die ich kenne.
Siehe Pimpl Idiom
Sie so etwas wie die PIMPL Idiom
Sheesh, muss hier schnell sein –
Kommerziell verwenden? ;)
Sie können Header-Dateien erstellen, in denen Sie nur die öffentliche und geschützte API deklarieren.
Dem Benutzer werden nur diese vorgestellt, die sie enthalten können. Sie verknüpfen ihren Code mit einer Bibliothek, die Sie mit der vollständigen API und den Definitionen erstellt haben.
Für Inline-Funktionen: Stellen Sie sicher, dass sie in nichtlinearem Code verwendet werden, dann wird eine Definition in der Bibliothek verfügbar sein (ich bin nicht sicher, ob sie in der Benutzerimplementierung verwendet wird).
Für Vorlagencode gibt es keinen wirklichen Weg herum. Eine halbherzige Lösung besteht darin, Code zu erstellen, der den Vorlagencode mit unterschiedlichen Objekttypen verwendet. Der Benutzer ist auf diese beschränkt, da sie die einzigen in Ihrer Bibliothek verfügbaren Definitionen sind.
- 1. Private Mitglieder der C++ Bibliothek verstecken
- 2. Doxygen: private/geschützte Methode verstecken ... und Tipps
- 3. Ermöglicht C++ 11 nicht-anonymen Unionen, statische Datenmitglieder zu enthalten?
- 4. Private Schnittstelle vs. private Methode - Ziel c
- 5. C# Referenzen; Mitglieder verstecken
- 6. C++ 11 private Standardkonstruktors
- 7. C# private (versteckte) Basisklasse
- 8. C# Private-Variable Liste
- 9. C#, .NET: verstecken DOS-Eingabeaufforderungsfenster
- 10. C# Verstecken Größe ändern Cursor
- 11. VB6 private statische in C#?
- 12. Access/Private/etc mit c
- 13. Verlinkte Liste private Zeiger C++
- 14. C++ private Variablennamen und Vererbungsmehrdeutigkeiten
- 15. C# Kodierungsstandards für private Membervariablen
- 16. Wie überprüft C# die C# private Definition?
- 17. Wie verstecken Sie die Kapselung in C#?
- 18. verstecken Sie das Konsolenfenster eines C-Programms
- 19. Verstecken von Lua Quellcode In C Anwendung
- 20. Wo verstecken sich Ihre Privates in Objective-C
- 21. Musterfunktion verstecken
- 22. private Variablen zwischen Methoden zurücksetzen C#
- 23. Unit testing private Methode - Ziel C
- 24. Private Methode in einer C++ - Schnittstelle?
- 25. C++ private Vererbung und statische Mitglieder/Typen
- 26. Unit Testing Private Setter Frage (C#)
- 27. Öffentliche Eigenschaften und private Mitglieder C#
- 28. Öffentliche virtuelle Funktion abgeleitet private in C++
- 29. Gleichzeitige private und öffentliche Vererbung in C++
- 30. Was ist der private Konstruktor in C#?
Danke, es funktioniert jetzt. Diese beiden Artikel erklären das Idiom gut. – jeffythedragonslayer
Hat dies Auswirkungen auf die Leistung? – jjxtra
Im Allgemeinen kann dies eine Auswirkung auf die Leistung haben, da es immer eine Zeigerdereferenzierung gibt, wenn auf die privaten Daten zugegriffen wird. Ein Compiler kann es jedoch so optimieren, dass der Einfluss vernachlässigbar ist. –