Ist es möglich, einen virtuellen statischen Konstantenwert in einer C ++ - Klasse zu deklarieren?

Ich hätte gerne eine Basisklasse mit einem konstanten Feld (wie eine eindeutige ID, die der Klasse zugeordnet ist und nach der Kompilierungszeit nicht mehr geändert werden kann). Soweit diestatic const Erklärung wäre in Ordnung. Jetzt möchte ich diese Basisklasse erben und sicherstellen, dass die Kinder dieser Klasse dasselbe Feld haben, aber mit ihren eigenen Werten. Wie kann ich das machen?

Nehmen wir an, ich hätte gerne eine Basisklasse mit dem NamenBase mit einemID Feld, das das enthältint Wert von 0. Dann möchte ich die Klassen habenA, B undCalle sind öffentliche Kinder vonBase und ich möchte sicherstellen, dass diese Kinder auch das haben würdenID Felder mit den jeweiligen Werten 1, 2 und 3 (mit "Sicherstellen" meine ich so etwas wie einen Compilerfehler zu bekommen, wenn sie keine explizit deklarierte ID haben).

Wenn ich es schaffen könnte, dieses Szenario zu erstellen, wäre meine Erwartung, nach dem zu fragenID Bereich von aBase* Zeiger, ich sollte unterschiedliche Werte erhalten, je nachdem, ob der Zeiger als erstellt wurdenew A(), new B() odernew C().

Meine Vermutung wäre zu deklarierenID wievirtual static const, was natürlich keinen Sinn macht und einen Compilerfehler gibt.

Was kann ich dann tun, um das beschriebene Ergebnis zu erzielen? (Das einzige, was ich mir vorstellen könnte, wäre zu deklarierenID als virtuelle Funktion, die eine Ganzzahl zurückgibt und dann den Wert fest in den Funktionskörper einprogrammiert, aber ich suche etwas Eleganteres.)

Danke im Voraus!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage