In der objektorientierten Programmierung statische Datenelemente , sogenannte Variablen auf Klassenebene, werden von allen Instanzen einer Klasse gemeinsam genutzt. Im Gegensatz zu regulären Datenelementen, die innerhalb jedes Objekts vorhanden sind, existieren statische Datenelemente außerhalb jeder Objektinstanz.
Um ihre eindeutige und konsistente Adresszuordnung sicherzustellen, erfordern statische Datenelemente eine einzige, explizite Definition im Programm. Diese Definition kann nicht in die Klassendefinition eingefügt werden, da Klassendefinitionen normalerweise in mehreren Objektdateien enthalten sind, was möglicherweise zu doppelten Definitionen führt. Daher müssen statische Datenelementdefinitionen separat deklariert werden.
Die nichtstatische Datenelementinitialisierung (NSDMI) ermöglicht es dem Programmierer, einen Anfangswert für nicht statische Datenelemente anzugeben Datenelemente innerhalb der Klassendefinition. Dabei handelt es sich jedoch lediglich um eine Initialisierung, nicht um eine Definition. Die eigentliche Definition eines Datenelements, sei es statisch oder nicht statisch, erfolgt außerhalb der Klasse.
Nicht statische Datenelemente werden in den Objekten gespeichert, zu denen sie gehören . Ihre Lebensdauer beginnt mit dem Konstruktor des Objekts. Statische Datenelemente hingegen existieren unabhängig von Objekten und befinden sich vom Start des Programms an an einer festen Adresse. Ihnen wird zur Kompilierzeit Speicher zugewiesen.
Das Definieren eines statischen Datenelements ähnelt dem Deklarieren einer externen Variablen in C. Eine externe Variablendeklaration, wie z. B. extern int i;, gibt an, dass die Variable i an anderer Stelle im Programm deklariert ist. Ebenso werden statische Datenelemente innerhalb der Klassendefinition deklariert, ihre Definition wird jedoch separat mit einer Syntax wie int X::i = 0; bereitgestellt, wobei X der Klassenname und i das statische Datenelement ist.
Das obige ist der detaillierte Inhalt vonWarum erfordern statische Datenelemente eine Initialisierung außerhalb der Klasse in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!