c++ private member deklariert in der header-vs static deklarierte variable in der cpp-Datei
ich habe eine variable, die ich lieber zu erklären, in einer cpp-Datei anstelle der header-Datei. Es sollte zugänglich sein, um Objekte der Klasse nur. Diese variable sollte eine separate Kopie für jedes Objekt der Klasse. Vererbung ist nicht notwendig.
Normalerweise, würde ich einfach deklarieren Sie in der Klasse definition.
A. h:
class A {
private:
int number;
}
Aber, kann ich dies anstelle?
B. h:
class B {
private:
//nothing
}
B.cpp:
static int number;
- Was ist das problem mit der normalen Vorgehensweise, die Sie vorgeschlagen, ersten ? (die Deklaration als nicht-statische
private
Mitglied) - ein Grund für die Deklaration in der .cpp-Datei ist, dass, wenn die privaten Mitglieder sind alle Strukturen, die ich brauchen würde, um zu erklären, alle Strukturen im header, das ist chaotisch. aber ansonsten ist es kein problem. auch ich wollte nur wissen, ob die beiden Ansätze sind die gleichen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, wenn man den zweiten Ansatz, du machst eine statische variable, was bedeutet, dass Sie nicht haben, eine andere Kopie für jedes Objekt der Klasse (Sie werden alle zu teilen, die variable).
Entweder Weg, wenn es sollte nur zugegriffen werden, indem diese Klasse, sollte es gehen in der Klasse Erklärung, und sollte nicht eine Globale variable. Indem Sie eine statische Globale variable, Sie beschränken den Zugang nur auf den Umfang der Datei, nicht auf die Klasse. Als guter Programmierstil, versuchen Sie mit so wenig Globale Variablen wie möglich.
Wenn Ihr Ziel ist das verstecken von Implementierungsdetails von einem Kunden, der nur sieht, wie Sie Ihre header-Dateien (entweder aus Gründen der Geheimhaltung, oder, um Abhängigkeiten zu vermeiden Bibliotheks-Interna), das design-Muster, das Sie suchen, ist die
pimpl
Muster ("pointer to implementation").myclass.h:
myclass.cpp:
Vorsicht: Dieses Beispiel-code ist nicht korrekt kopieren Semantik. Sie möchten möglicherweise verwenden Sie einigen smart-pointer statt, oder die Umsetzung des richtigen copy-Konstruktor /Zuweisungsoperator shenannigans.
Ist es möglich, Daten zu verstecken-Mitglieder in der cpp-Datei mit dem privaten Umsetzung idiom.
Nicht sicher, ob es sich lohnt mit nur einem integer. Aber dies kann verwendet werden, zu reduzieren compile-Zeiten: Sie können ändern, ist Ein "data member" und die Umsetzung am Willen, ohne zu kompilieren, Dateien inklusive einem.hpp.
Auch, lieber eine passende smart-pointer statt der einfachen Zeiger (eine, geeignete Kopie Verhalten und kann erklärt werden mit einer unvollständigen Typ).
Halten es statisch nicht lassen Sie Sie erreichen, das. Es wird eine Kopie, die gemeinsam durch alle Instanzen.
Wenn Sie möchten, dass jedes Objekt seine eigene Kopie des
number
dann haben Sie, um es ein Mitglied Ihrer Klasse.Wenn Sie eine separate Kopie für jedes Objekt der Klasse, die Sie deklarieren müssen in der header-Datei, oder irgendeine Art von statischen Zuordnung zwischen dem Wert des Objektes und der Wert für das Objekt, das initialisiert wird, indem der object-Konstruktor.
Wenn Sie möchten, eine variable zu einer Klasse zugeordneten Objekte deklariert werden innerhalb der Klasse. Alle Objekt-Daten sollte innerhalb der Klasse.
Das heißt Kapselung.