punteros - ¿Qué es la inicialización dinámica del objeto en c++?
punteros c++ (4)
Inicialización dinámica significa el primer valor asignado a la variable después de que la asignación de memoria no se conoce en tiempo de compilación, se evalúa solo en tiempo de ejecución. por ejemplo
#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;
}
Como sabemos, una constante puede obtener valor solo una vez, es decir, en el momento de la inicialización. este ejemplo muestra que incluso una variable global que es almacenamiento estático si se inicializa dinámicamente por el valor de retorno de una función, el primer valor asignado a la variable es el valor devuelto por la función, que reemplaza el valor predeterminado inicial 0 de la variable asignada a el tiempo de asignación de memoria.
¿Qué es la inicialización dinámica de objetos en c ++?
Por favor explique con un simple ejemplo ...
La inicialización de una variable en el tiempo de ejecución desde el teclado se conoce como Inicialización dinámica.
Código de programa:-
int a=cube(n);
En el código de programa anterior, a
es una variable global a la que se asigna dinámicamente un número n
través de un cube
función, donde cube()
realiza el cubo de un número.
Este es un ejemplo de Inicialización Dinámica.
La inicialización dinámica es aquella en la que el valor de inicialización no se conoce en tiempo de compilación. Se calcula en tiempo de ejecución para inicializar la variable.
Ejemplo,
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.
Es decir, la inicialización estática generalmente implica la expresión constante (que se conoce en tiempo de compilación), mientras que la inicialización dinámica implica una expresión no constante.
static int c;//this is also static initialization (with zero)!
§3.6.2 / 1 del Estándar C ++ (2003) dice:
Los objetos con una duración de almacenamiento estática (3.7.1) se inicializarán en cero (8.5) antes de que se lleve a cabo cualquier otra inicialización. La inicialización cero y la inicialización con una expresión constante se denominan colectivamente inicialización estática ; el resto de la inicialización es inicialización dinámica .
Entonces hay dos tipos de inicializaciones:
- Inicialización estática: es inicialización cero o inicialización con una expresión constante
- Cualquier otra inicialización es la inicialización dinámica.
También tenga en cuenta que la misma variable se puede inicializar dinámicamente después de haber sido inicializada estáticamente. Por ejemplo, mira este código:
int d = factorial(8);
int main()
{
}
Como d
es una variable global, tiene almacenamiento estático. Eso significa que, de acuerdo con §3.6.2.1
se inicializa a 0 en la fase de inicialización estática que ocurre antes de que se lleve a cabo cualquier otra inicialización . Luego, más tarde, en tiempo de ejecución, se inicializa dinámicamente con el valor devuelto por la función factorial()
.
Esto significa que los objetos globales se pueden inicializar dos veces: una vez mediante inicialización estática (que es inicialización cero) y más tarde, en tiempo de ejecución, pueden inicializarse dinámicamente.
La inicialización dinámica significa que los valores iniciales se pueden proporcionar durante el tiempo de ejecución. Incluso los objetos de clase se pueden inicializar dinámicamente. Es decir, con los valores proporcionados en tiempo de ejecución. :-))