Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Des/Constructores virtuales en C++?

Estas en el tema de Des/Constructores virtuales en C++? en el foro de C/C++ en Foros del Web. Tengo una duda. Por ahi lei que no se puede crear un constructor ni un destructor virtual de la misma manera que una funcion normal. ...
  #1 (permalink)  
Antiguo 13/07/2007, 17:37
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
Des/Constructores virtuales en C++?

Tengo una duda. Por ahi lei que no se puede crear un constructor ni un destructor virtual de la misma manera que una funcion normal.
Pero me surgio la duda:

Tengo una clase como esta:

Cita:
class miClase {
public:
miClase();
~miClase();
.
.
}

class subClase:public miClase {
public:
subClase();
~subClase();
.
.
}
Dentro del siguiente codigo:

Cita:
int main(int argc, char **argv)
{
miClase *temp;
temp=new subClase;
delete temp;
}
Que constructor se llama y que destructor? el de miClase o el de subClase?
Y como se llamaria entonces el cons/destructor que no se llamo por defecto en este ejemplo?

Saludos
  #2 (permalink)  
Antiguo 14/07/2007, 12:38
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
Re: Des/Constructores virtuales en C++?

Bueno, despues de experimentar un poco llegue a una conclusion y a otra duda.

Retomando el ejemplo anterior, en un codigo asi:

Cita:
int main(int argc, char *argv[])
{
subClase a;
return 0;
}
Primero se llama el constructori de miClase, luego se llama el constructor de subClase. Despues del return 0, se llama el destructor de subClase y luego el destructor de miClase.

Pero en el siguiente codigo:

Cita:
int main(int argc, char *argv[])
{
miClase *a=new subClase;
delete a;
}
Se llama el contructor de miClase, luego se llama el constructor de subClase, pero al llegar al delete, solo se llama el destructor de miClase y no el de subClase. Como hago para que se llamen los 2?

Saludos
  #3 (permalink)  
Antiguo 14/07/2007, 12:55
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
Re: Des/Constructores virtuales en C++?

Otra vez soy yo.
Como veran, el tutorial de C con clase sigue siendo el mejor.
y pues por los que alguna vez se topen con estas dudas, aqui esta la explicacion.

En el codigo que puse anteriormente:

Cita:
int main(int argc, char *argv[])
{
miClase *a=new subClase;
delete a;
}
Solo se llama al destructor de miClase, pero como bien sabemos, al volver una funcion de la miClase virtual, se llama la de la clase derivada en vez de la de la clase base.

Cita:
class miClase {
public:
miClase();
virutal ~miClase();
.
.
}

class subClase:public miClase {
public:
subClase();
~subClase();
.
.
}

int main(int argc, char *argv[])
{
miClase *a=new subClase;
delete a;
}
Aqui sucede lo siguiente:
1- Se llama el constructor de miClase
2- Se llama el constructor de subClase
3- Se llama el destructor de subClase
4- Se llama el destructor de miClase

Igual que en el primer ejemplo del segundo post.

Espero a alguien le sirva algun dia.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:51.