Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

constructores virtuales

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: constructores virtuales Responder citando

¿Se pueden crear constructores virtuales en C++ ?
El problema, es que tengo una clase base a la que he llamado TGrid que a su vez hereda de TFrame, y otra derivada directamente de TGrid que se llama Grid1.

TFrame ----> TGrid ----> Grid1

Pues bien, al crear un objeto de la clase derivada Grid1, el constructor de éste llama al constructor de la clase base TGrid, pero con las propiedades (Name, etc) de la clase TGrid. Yo quisiera que el constructor de la clase Grid1 llamara al constructor de la clase base TGrid con las propiedades de la clase Grid1. Justamente lo que haría una función virtual.

He probado a declarar el constructor de TGrid como virtual, el compilador no se queja, pero el efecto en la ejecución es el mismo que si no fuera virtual.

Volver arriba
Mensaje    Asunto: constructores virtuales Responder citando

La respuesta a la pregunta es sí.

Que yo sepa un método virtual, es con el fin de cumplir el papel de interface.
Lo que deba hacer el método virtual de una clase debe implementarse en ella misma y este no se hereda a las clases derivadas de la clase en cuestión.


Ahora: Así es que yo paso los parámetros a la clase ancestra

class Base
{
private:
int FValor;
public:
virtual void __fastcall Base(int Valor);
void HagaAlgo(void);
}

class Base1:public Base
{
private:
int FOtroValor;
public:
void __fastcall Base1(int MiValor);
void HagaAlgo(void);
};


void __fastcall Base1(int MiValor)
:Base(MiValor)
{
ShoMessage(IntToSTr(MiValor));
}

si lo que quieres es invocar el método de la clase ancestra...
Lo llamas así

void __fastcall Base1(int MiValor)
:Base(MiValor)
{
Base::Base(MiValor); /*Aquí llama al constructor de quien se hereda*/
}

void __fastcall Base1(int MiValor)
:Base(MiValor)
{
inherited::HagaAlgo(); /*Aquí llama al método de quien se hereda, en este caso el de Base*/
}

Bueno no sé si esa es tu inquietud...

Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.