Wie kann ich die Initialisierung eines const-variable einer Basisklasse in einer abgeleiteten Klasse der Konstruktor in C++?
Habe ich eine abstrakte C++ - Klasse ohne Konstruktor. Es soll eine Basis-Klasse, so können andere Klassen von Ihr Erben. Was ich versuche zu tun, ist die Deklaration einer Konstanten Variablen in der Basisklasse, und initialisieren Sie es in jeder abgeleiteten Klasse Konstruktor, aber nirgendwo sonst in jeder dieser Klassen. Ist es legal, in C++? Wenn ja, wie kann ich das machen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht. Die ständige muss initialisiert werden, die in der Basisklasse Konstruktor.
Die Lösung ist, einen entsprechenden Konstruktor in der Basisklasse ist – sonst kann es nicht verwendet werden. Darüber hinaus, es gibt keinen Grund, nicht dafür zu sorgen, dass der Konstruktor.
protected
dann müssen Sie nicht sorgen zu machen über jede andere instanziieren Sie es direkt.Base::~Base
in der header-Datei, es sollteinline virtual
.inline
Erklärung ist nur eine Anleitung für den compiler. Ohne Sie kann eine definition per #include, oder der compiler kann inline und geben Sie eine definition pro verwenden. So oder so, mit einer leeren Methode block, es gibt keine negativen Auswirkungen. (Hoffentlich wird der compiler optimieren den Anruf völlig aus.)inline
erforderlich ist. Ist es nicht eine Leistung Hinweis; es ändert die Bedeutung der Erklärung. Den Rumpf der Funktion leer ist, ändert daran nichts. stackoverflow.com/questions/1875947/...inline
bei der Bereitstellung einer Implementierung innerhalb der Klassendefinition. Da jedoch keine Diagnose erforderlich ist (die Anführungszeichen @ stackoverflow.com/questions/908830#910686)das Ergebnis wird wahrscheinlich sein, wie ich es beschrieben, auch wenn "genau eine" ist verletzt, aber es hätte keine negativen Auswirkungen, da die Methode tut nichts.inline
behebt. Sieht aus wie ich lernte, eine wichtige Verwendung fürinline
zusammen mit etwas Demut zur gleichen Zeit. (Musst Respekt die Effizienz, die, denke ich mal...)Wenn alles, was Sie brauchen, es zu tun auf diese Weise:
Der Grund dafür ist, dass Sie dürfen nur Werte zuweisen, um einen const-Wert bei der Initialisierung Zeit. Einmal Montiert ist, initialisiert Sie dürfen nicht mehr um den Wert zu ändern. Deshalb haben Sie es genau so machen, wie oben gezeigt.
Warum gehst du nicht machen Sie einen geschützten Konstruktor in der abstrakten Basis-Klasse, und legen Sie den Konstanten Wert gibt es?