[C con Clase] Otra duda

Miguel Alejandro Jimenez Ramirez cerberbero en gmail.com
Sab Nov 3 19:22:51 CET 2012


#include <iostream>

class A
{
public:
    A(int n = 0)
        : m_i(n)
    {
        std::cout << m_i;
        ++m_i;
    }

protected:
    int m_i;
};

class B
    : public A
{
public:
    B(int n = 5) : m_a(new A[2]), m_x(++m_i) { std::cout << m_i; }

    ~B() { delete [] m_a; }

private:
    A m_x;
    A *m_a;
};
Bueno la verdad esta pregunta no la he terminado de entender , pero
seguire leyendo y asi lograre ver la respuestas correctas.


Por otro lado , y espero no molestar con tantas preguntas , pero es
que pense que tenia todo claro sobre el tema de constructores y clases
derivadas y con este programa veo que sigo perdido y no entiendo el
porque.


el programa es el siguiente:

int main()
{
    B b;

    std::cout << std::endl;

    return 0;
}

*********************************************************************************************

al ejecutarlo veran que el resultado es 02002.

La verdad en mi analisis yo vi otro resultado , pense que era 01242

por que ? se preguntaran ustedes , y pues he aqui mi raciocinio:

El primer 0:

como en el main declaramos un objeto de la clase B , entonces me
dirigo hacia la clase B, veo que es una clase derivada de la clase A ,
entonces veo el constructor de la clase A :

class A
{
public:
    A(int n = 0)
        : m_i(n)
    {
        std::cout << m_i;
        ++m_i;
    }

protected:
    int m_i;
};
 y veo que imprime m_i , que tendria el valor de 0 ya que el
constructor no esta recibiendo ningun parametro.

Luego veo el constructor de B , entonces veo que hay un objeto que es
un apuntador a la clase A , y que se crea un espacio de memoria para
una clase A y es un vector de dos posiciones , no se si lo que voy a
decir esta bien , pero pense que se llamaba al constructor de A por
cada una de las dos posiciones , por lo tanto imprimia 1 , el cuel era
el valor de m_i y luego lo aumentaba en uno , y en la segunda posicion
volvia a hacer lo mismo , entonces ya en esta instancia se habia
imprimido el numero 2 y m_i tenia el valor de 3 , pero luego al objeto
 m_x que es de la clase A , envia el parametro (++m_i) entonces se
ejecuta este constructor y  m_i vale 4 entonces se imprime 4 y  m_i
esta en 5 , al final ejecuta el constructor de B y se imprime el
ultimo valor de que seria 5.


Al final todo lo que habia pensado estaba mal , por que la ejecucion
del programa muestra otro resultado , por lo tanto mi duda es cual es
el procedimiento que hace este programa para imprimir : 02002??

Espero que me puedan ayudar y creo que esta seria mi ultima duda pro
hoy , muchas gracias por todas las respuestas recibidas.

Cordialmente.



-- 
MIGUEL ALEJANDRO JIMENEZ R.




Más información sobre la lista de distribución Cconclase