una tipos que programacion poo objeto llamar instancia entre ejemplos ejemplo diferencia crear como clases clase c++ constructor initialization const

c++ - tipos - que es una instancia en c#



¿Por qué deben los miembros de const inicializarse en el inicializador de constructor en lugar de en su cuerpo? (3)

En C ++, un objeto se considera completamente inicializado cuando la ejecución ingresa al cuerpo del constructor.

Tu dijiste:

"Quería saber por qué se debe inicializar const en la lista de inicializadores de constructores en lugar de en su cuerpo".

Lo que te falta es que la inicialización ocurre en la lista de inicialización, y la asignación ocurre en el cuerpo del constructor. Los pasos en lógica:

1) Un objeto const solo puede inicializarse.

2) Un objeto tiene todos sus miembros inicializados en la lista de inicialización. Incluso si no los inicializa explícitamente allí, el compilador lo hará felizmente por usted :-)

3) Por lo tanto, colocando 1) y 2) juntos, un miembro que es const solo puede tener un valor asignado en la inicialización, lo que ocurre durante la lista de inicialización.

¿Por qué los miembros de la clase declarados como const deben inicializarse en la lista de inicializadores del constructor en lugar de en el cuerpo del constructor?

¿Cuál es la diferencia entre los dos?


const variables const y reference deben inicializarse en la línea en la que se declaran.

class Something { private: const int m_nValue; public: Something() { m_nValue = 5; } };

produciría un código equivalente a;

const int nValue; // error, const vars must be assigned values immediately nValue = 5;

No es suficiente asignar valores de const o variables de miembro de referencia en el cuerpo del constructor.

C ++ proporciona otra forma de inicializar las variables miembro que permite inicializar las variables miembro cuando se crean en lugar de después. Esto se hace mediante el uso de una lista de inicialización.

Puede asignar valores a las variables de dos maneras: explícita e implícitamente: ver plaincopy a clipboardprint?

int nValue = 5; // explicit assignment double dValue(4.7); // implicit assignment

Usar una lista de inicialización es muy similar a realizar asignaciones implícitas.

Recuerde que la lista de inicialización de miembros, utilizada para inicializar objetos de datos base y miembros, está en la definición, no en la declaración del constructor.

Más sobre cpp-tutorial y Code Wrangler .


Porque las variables constantes y las referencias deben inicializarse en el momento de la declaración, es decir, antes de su uso. Pero los constructores asignarán valor a una variable no invalidante de la variable, por lo tanto, debes usar la lista de initabilidad para constantes y referencias.