Ich habe die Antwort in parashift gelesen, aber ich brauche ein paar Details, warum der Compiler es nicht erlaubt, statische Mitgliedsvariablen im Konstruktor zu definieren.
Antworten
Zu viele Anzeigen?Statische Mitgliedsvariablen sind nicht mit jedem Objekt der Klasse verbunden. Sie werden von allen Objekten gemeinsam genutzt. Wenn Sie im ctor initialisieren, bedeutet dies, dass Sie versuchen, sie mit einer bestimmten Instanz der Klasse zu verknüpfen. Da dies nicht möglich ist, ist es nicht erlaubt.
Ich nehme an, Sie beziehen sich auf die Verwendung in einer Initialisierungsliste für einen Konstruktor. Ein statisches Datenelement wird von allen Instanzen der Klasse gemeinsam genutzt. Es kann sein initialisiert einmal (per Definition der Initialisierung), so dass es nicht sinnvoll wäre, sie für jede Instanz zu initialisieren.
Sie können ihm jedoch im Konstruktorkörper einen Wert zuweisen (oder den vorhandenen Wert ändern). Wenn das Datenelement eine Konstante ist, können Sie es auch außerhalb des Konstruktors statisch initialisieren.
Statische Variable kann nicht innerhalb einer Methode definiert werden (auch wenn die Methode statisch ist), Sie können jedoch die statische Variable außerhalb des Konstruktors definieren und einen Wert innerhalb des Konstruktors zuweisen. Auf diese Weise ist die Variable jedoch für die gesamte Klasse zugänglich.
1) Statische Variablen sind Eigentum der Klasse und nicht des Objekts. 2) Jede statische Variable wird initialisiert, bevor ein Objekt erstellt wird.
- Das ist der Grund, warum Compiler nicht erlauben, statische Variablen innerhalb des Konstruktors zu definieren, da der Konstruktor aufgerufen wird, wenn ein Objekt erstellt wird.
Eine Mitgliederinitialisierungsliste bezeichnet Initialisierung . A static
Mitglied bereits zu Beginn Ihres Programms initialisiert wird (vor main
). Wenn Sie das tun könnten, was Sie vorschlagen, würden Sie das System "neu initialisieren". static
Mitglied mit jedem Objekt, das Sie erstellen, aber Objekte werden nur einmal initialisiert.
Wenn Sie stattdessen den Wert eines Objekts ändern wollen, nachdem es initialisiert wurde, müssen Sie zuweisen. dazu.