ID-Daten-Mitglied im c++ - Klasse
Mein Lehrer erforderlich, uns die ID-Daten-member, die automatisch generiert, und einmal etabliert, kann es nicht geändert werden.
Was ist den am besten geeigneten Typ?
wenn die Antwort ist
static const int ID;
Wie kann ich generieren Sie automatisch, während es ist const?
- Hinweis: Sie benötigen einen non-const static UND const Mitglieder.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da die ID eindeutig sein muss, soll sicherstellen, dass zwei Instanzen bekommt nie die gleiche ID. Auch, dass sich niemand außerhalb der Klasse zu stören bei der Erzeugung des Vakuums.
Zuerst definieren Sie eine statische Feld in Ihrer Klasse:
Dann, nach jeder Instanz erstellt wurde, sollte eine neue ID-Wert und erhöhen den newUID Zähler:
Niemand hat Zugang zu den internen newUID außer die Klasse, die ID wird automatisch erzeugt für jede Instanz und Sie sind (fast1) achten darauf, dass keine zwei Instanzen mit derselben ID-Nummer.
1, es sei denn, Sie erzeugen ein wenig mehr als 4 Milliarden Instanzen
Hier ist ein Beispiel:
Und Sie müssen diese irgendwo in Ihr .cpp-Datei:
Diese verwendet Initialisierungs-Listen um den trick zu tun. Wir müssen es so machen, denn es ist nur in der Initialisierung-Listen, in denen Sie sich zuordnen können
const
Mitglied in einer Instanz.Kern des Konzepts ist, dass Sie müssen eine "Globale Einstellung" zu verfolgen, die ID, die zugewiesen sind, um Instanzen, die in Zukunft erstellt. Es ist
currID
in diesem Beispiel. Für jede Instanz erstellt, in Ihrer Klasse, weisen Sie den Wert dercurrID
als ID die Instanz dann erhöht es (currID
). Auf diese Weise erhalten Sie Instanzen, die eindeutige IDs haben.int MyClass::APrivateFunc() { ... }
. Völlig klar, Sie setzenint SomeClass::currId = 0;
außerhalb einer Funktion, wieder denselben Weg, wie definieren Sie eine member-Funktion.erstellen Sie eine const-ID als int und initialisieren Sie im Konstruktor die Initialisierung Liste wie
Hoffe, das hilft.
Kann man eigentlich eine Funktion aufrufen (rand, in diesem Fall) in der Bau-Initialisierungs-Liste.
Bis Sie jetzt, wie Sie und bepflanzen es.
Wenn Ihr Lehrer ermöglicht die boost-libs, dann versuchen Boost.Uuid. Ein Beispiel ist hier. Es ist RFC 4122 konform.