2012-05-09 5 views
8

Leo en algunos artículos que hay algo llamado Inicializando bloques en Java; donde podemos realizar algunas asignaciones de inicialización cuando se carga la clase o se crea una instancia.¿Hay una construcción como bloques de inicialización de Java en C++?

Además de los métodos y constructores, los bloques de inicialización son el tercer lugar en un programa Java donde se pueden realizar operaciones.

class InitDemo 
{ 
    static int y; 
    int x; 
{ 
    y = 10; 
    x = 0; 
} 
} 

estoy preguntando si existe tal paradigme en C++? Gracias.

+0

C no tiene el concepto de clases que se "cargan", y su vista de estática es completamente diferente de Java. Entonces, aparte de los inicializadores estáticos, no hay nada similar. –

+1

(En esencia, el bloque 'estático' en Java es el constructor de la clase, porque las clases son objetos (semi) completos. Las clases C++ no son objetos.) –

+0

Gracias por la información, fue útil. –

Respuesta

4

Es necesario señalar que hay dos formas diferentes de bloques de inicialización en Java. El bloque {...}, sin la palabra clave static, es solo un poco de swizzling del compilador - el texto en el bloque se agrega al frente de cualquier constructor que se haya definido - no se genera un segmento de código por separado. Un bloque que comienza en static {..., por otro lado, es un bloque de inicialización estático y un procedimiento (semi) propio en sí mismo (llamado, no sorprendentemente, "estático").

El bloque static se ejecuta solo una vez, inmediatamente (con algunas advertencias) después de cargar la clase. El inicializador no estático (en virtud de ser copiado en los constructores) se ejecuta cada vez que se ejecuta un constructor, y por lo tanto, generalmente no es apropiado para init estático.

2

En pocas palabras, C++ no tiene un equivalente directo para este constructo de Java. Para obtener un comportamiento similar, debe establecer x y y desde los constructores InitDemo (que también puede hacer en Java).

+0

Sí, de hecho, veo que a diferencia de Java, los constructores siguen siendo el único * lugar para iniciar asignaciones para C++. –

+0

@ Blood-HaZaRd: Bastante. En Java, un bloque de inicialización (no '' estático') es solo una forma de colocar un código común en cada constructor. – NPE

+0

Sí, y además de eso, hay dos tipos de bloques de intilización estáticos y no estáticos que creo que son útiles. –

Cuestiones relacionadas