web-dev-qa-db-fra.com

Qu'est-ce que l'initialisation dynamique d'objet en c ++?

Qu'est-ce que l'initialisation dynamique des objets en c ++?

S'il vous plaît expliquer avec un exemple simple ...

35
Mahi

L'initialisation dynamique est celle dans laquelle la valeur d'initialisation n'est pas connue au moment de la compilation. Il est calculé au moment de l'exécution pour initialiser la variable.

Exemple,

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.

En d’autres termes, l’initialisation statique habituellement implique une expression constante (connue lors de la compilation), tandis que l’initialisation dynamique implique une expression non constante.

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

Le § 3.6.2/1 du standard C++ (2003) dit:

Objets avec durée de stockage statique (3.7.1) doit être initialisé à zéro (8.5) avant toute autre initialisation se déroule. Initialisation zéro et initialisation avec un constant Les expressions sont collectivement appelées initialisation statique ; tous les autres l'initialisation est dynamique initialisation .

Donc, il y a deux types d'initialisations:

  • Initialisation statique: son initialisation à zéro ou son initialisation avec une expression constante
  • Toute autre initialisation est une initialisation dynamique.

Notez également que la même variable peut être initialisée dynamiquement après son initialisation statique. Par exemple, voir ce code:

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

d étant une variable globale, il dispose d'un stockage statique. Cela signifie que, selon §3.6.2.1, il est initialisé à 0 lors de la phase d'initialisation statique qui se produit avant toute autre initialisation. Ensuite, lors de l'exécution, il est initialisé de manière dynamique avec la valeur renvoyée par la fonction factorial()

Cela signifie que les objets globaux peuvent être initialisés deux fois: une fois par initialisation statique (initialisation zéro) et plus tard, au moment de l'exécution, ils peuvent être initialisés de manière dynamique.

47
Nawaz

L’initialisation dynamique signifie que la première valeur affectée à la variable après l’allocation de mémoire n’est pas connue au moment de la compilation, elle n’est évaluée qu’au moment de l’exécution, par exemple.

#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;

} 

Comme nous savons qu'une constante ne peut obtenir une valeur qu'une seule fois, c'est-à-dire au moment de l'initialisation ..__, cet exemple montre que même une variable globale qui est un stockage statique si elle est initialisée dynamiquement par la valeur renvoyée d'une fonction, la première valeur affectée à la variable est la valeur renvoyée par function, qui remplace la valeur par défaut initiale 0 de la variable attribuée au moment de l'allocation de mémoire.

6
Arun Kumar

L'initialisation d'une variable à partir du clavier au moment de l'exécution est appelée initialisation dynamique.

Code du programme: -

 int a=cube(n);

Dans le code de programme ci-dessus, a est une variable globale à laquelle un numéro n est attribué de manière dynamique via une fonction cube, où cube() effectue le cube d'un nombre.

Ceci est un exemple d'initialisation dynamique.

0
KevRhon Inc.

L'initialisation dynamique signifie que les valeurs initiales peuvent être fournies pendant l'exécution. Même les objets de classe peuvent être initialisés de manière dynamique. C'est à dire. avec les valeurs fournies au moment de l'exécution. :-)) 

0
Nousheen