it-swarm.com.de

Was ist dynamische Initialisierung von Objekten in C++?

Was ist dynamische Initialisierung von Objekten in C++?

Bitte erklären Sie es mit einem einfachen Beispiel ...

35
Mahi

Bei der dynamischen Initialisierung ist der Initialisierungswert zum Zeitpunkt der Kompilierung nicht bekannt. Es wird zur Laufzeit berechnet, um die Variable zu initialisieren.

Beispiel,

int factorial(int n)
{
     if ( n < 0 )       return -1; //indicates input error
     else if ( n == 0 ) return 1;
     else               return n * factorial(n-1);
}

int const a = 10 ; //static initialization 
             //10 is known at compile time. Its 10!

int const b = factorial(8); //dynamic initialization 
                      //factorial(8) isn't known at compile time,
                      //rather it's computed at runtime.

Das heißt, statische Initialisierung beinhaltet in der Regel einen konstanten Ausdruck (der zur Kompilierzeit bekannt ist), während die dynamische Initialisierung einen nicht konstanten Ausdruck beinhaltet.

static int c;//this is also static initialization (with zero)!

§3.6.2/1 des C++ - Standards (2003) besagt:

Objekte mit statischer Speicherdauer (3.7.1) wird mit Null initialisiert (8.5) vor jeder anderen Initialisierung stattfinden. Nullinitialisierung und Initialisierung mit einer -Konstante Ausdruck werden gemeinsam als .__ bezeichnet. statische Initialisierung ; alle Anderen Initialisierung ist dynamisch Initialisierung .

Es gibt also zwei Arten von Initialisierungen:

  • Statische Initialisierung: entweder Nullinitialisierung oder Initialisierung mit konstantem Ausdruck
  • Jede andere Initialisierung ist dynamische Initialisierung.

Beachten Sie außerdem, dass dieselbe Variable dynamisch initialisiert werden kann, nachdem sie statisch initialisiert wurde. Siehe zum Beispiel diesen Code:

int d = factorial(8);
int main()
{
}

Da d eine globale Variable ist, verfügt sie über statischen Speicher. Das heißt, gemäß §3.6.2.1 wird es in der statischen Initialisierungsphase, die ist, auf 0 initialisiert, bevor eine andere Initialisierung erfolgt. Später zur Laufzeit wird es dynamisch mit dem von der Funktion factorial() zurückgegebenen Wert initialisiert. 

Das heißt, globale Objekte können zweimal initialisiert werden: Einmal durch statische Initialisierung (Nullinitialisierung) und später zur Laufzeit können sie dynamisch initialisiert werden.

47
Nawaz

Dynamische Initialisierung bedeutet, dass der erste Wert, der der Variablen nach der Speicherzuordnung zugewiesen wird, zur Kompilierzeit nicht bekannt ist. Er wird zum Beispiel nur zur Laufzeit . Ausgewertet

#include <iostream.h>

using namespace std;

int sample()
{
    int x;
    cin >> x;
    return x;
}

const int t = sample(); //dynamic initialization

int p = sample();       //dynamic initialization

void main()

{

    cout << t;

    cout << p;

} 

Wie wir wissen, kann eine Konstante nur einmal einen Wert erhalten, dh zum Zeitpunkt der Initialisierung. Dieses Beispiel zeigt, dass selbst eine globale Variable, die statisch gespeichert wird, wenn der Rückgabewert einer Funktion den ersten Wert der Variablen dynamisch initialisiert ist der von function zurückgegebene Wert, der den anfänglichen Standardwert 0 der zum Zeitpunkt der Speicherzuweisung zugewiesenen Variablen ersetzt.

6
Arun Kumar

Die Initialisierung einer Variablen zur Laufzeit über die Tastatur wird als dynamische Initialisierung bezeichnet.

Programmcode:-

 int a=cube(n);

Im obigen Programmcode ist a eine globale Variable, der dynamisch eine Nummer n durch eine Funktion cube zugewiesen wird, wobei cube() den Cube einer Zahl ausführt.

Dies ist ein Beispiel für die dynamische Initialisierung.

0
KevRhon Inc.

Die dynamische Initialisierung bedeutet, dass die Anfangswerte während der Laufzeit bereitgestellt werden können. Sogar Klassenobjekte können dynamisch initialisiert werden. D.h. mit den zur Laufzeit angegebenen Werten. :-) 

0
Nousheen