[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