Saltar al contenido

¿El lugar correcto para inicializar las variables de clase?

Solución:

Lo que tienes ahí es una variable de instancia. Cada instancia de la clase obtiene su propia copia de myInt. El lugar para inicializarlos es en un constructor:

class Foo {
private:
    int myInt;
public:
    Foo() : myInt(1) {}
};

Una variable de clase es aquella en la que solo hay una copia compartida por cada instancia de la clase. Esos se pueden inicializar a medida que lo intenta. (Vea la respuesta de JaredPar para la sintaxis)

Para valores integrales, también tiene la opción de inicializar una constante estática en la definición de la clase:

class Foo {
private:
    static const int myInt = 1;
};

Este es un valor único compartido por todas las instancias de la clase que no se puede cambiar.

Para ampliar la respuesta de Jared, si desea inicializarlo como está ahora, debe colocarlo en el Constructor.

class Foo
{
public:
    Foo(void) :
    myInt(1) // directly construct myInt with 1.
    {
    }

    // works but not preferred:
    /*
    Foo(void)
    {
        myInt = 1; // not preferred because myInt is default constructed then assigned
                   // but with POD types this makes little difference. for consistency
                   // however, it's best to put it in the initializer list, as above
                   // Edit, from comment: Also, for const variables and references,
                   // they must be directly constructed with a valid value, so they
                   // must be put in the initializer list.
    }
    */

private:
    int myInt;
};

Se puede inicializar directamente en el archivo de encabezado, en c ++ 11 o gnu ++ 11:

int myInt = 1;

Consulte este artículo “C ++ 11 Tidbits: Inicializadores de miembros de datos no estáticos”

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *