Was ist der Unterschied zwischen statischen und normalen Variablen in C ++?


Antwort 1:

Static ist eines der Schlüsselwörter, die in C ++ eine Million Bedeutungen haben.

Aus dem Kopf (wahrscheinlich nicht erschöpfend):

  • Auf eine in einer Funktion definierte statische Variable kann nur in der Funktion zugegriffen werden, sie bleibt jedoch bei Funktionsaufrufen erhalten. Wenn Sie also eine statische Variable auf 0 initialisieren und die Funktion diese inkrementiert, wird beim zweiten Aufruf der Wert 1 angezeigt und so weiter. Eine normale Variable wird jedes Mal neu initialisiert, wenn die Funktion aufgerufen wird (und der Speicher für die Variable wird freigegeben, wenn die Funktion beendet wird). Eine statische Mitgliedsvariable einer Klasse wird von Instanzen der Klasse gemeinsam genutzt. Mit anderen Worten, es gehört zu keiner Instanz. Jede vorgenommene Änderung ist für alle Instanzen der Klasse sichtbar (und wenn Sie statische Elementfunktionen haben, können Sie auf diese Variablen zugreifen, ohne auch nur eine Instanz der Klasse zu haben). Normale Variablen leben und sterben mit der Instanz, und jede Instanz hat ihre eigene unabhängige Kopie. Eine globale statische Variable ist wie eine normale globale Variable, außer dass sie über eine interne Verknüpfung verfügt, was bedeutet, dass sie nur in derselben Übersetzungseinheit (~ = Datei) verfügbar ist ), so dass Sie nicht von einer anderen Datei darauf zugreifen können. Auf eine normale globale Variable kann von anderen Dateien aus zugegriffen werden.

Antwort 2:

Hallo. Wenn eine Variable oder ein Element in einer Klasse als statisch definiert ist, wird gemessen, dass sein Wert für jede Instanz (Objekt) dieser bestimmten Klasse gleich ist.

Wenn Sie also eine Klasse wie folgt definieren:

Klassenobjekt {
Öffentlichkeit:
int x;
statisch int y;
};

Objekt a, b;
a = neues Objekt ();
b = neues Objekt ();
b.y = 0;
a.y = 1;
if (a.y == b.y)
{
cout << "So funktioniert die statische Variable" << endl;
}

Dies ist nicht dasselbe wie eine "const" -Variable, deren Wert nicht geändert werden kann.

Ich hoffe, es hilft. Viel Glück.


Antwort 3:

Hallo. Wenn eine Variable oder ein Element in einer Klasse als statisch definiert ist, wird gemessen, dass sein Wert für jede Instanz (Objekt) dieser bestimmten Klasse gleich ist.

Wenn Sie also eine Klasse wie folgt definieren:

Klassenobjekt {
Öffentlichkeit:
int x;
statisch int y;
};

Objekt a, b;
a = neues Objekt ();
b = neues Objekt ();
b.y = 0;
a.y = 1;
if (a.y == b.y)
{
cout << "So funktioniert die statische Variable" << endl;
}

Dies ist nicht dasselbe wie eine "const" -Variable, deren Wert nicht geändert werden kann.

Ich hoffe, es hilft. Viel Glück.