Intentando crear una clase de tipo de controlador donde, debajo, Base es el controlador al que se le pasa un tipo en la creación de instancias. El tipo, el 2 en este caso, se usa para construir el objeto derivado correcto.Creación de objetos derivados de la clase base
Mi compilador está arrojando un error de sintaxis de Declaración en la línea "Clase Base".
Mi objetivo final es ser capaz de hacer esto:
Base *B;
B = new Base(2);
if(B)
{
B->DoStuff();
B->DoMoreStuff();
delete B;
}
Aquí está mi código que no se compilará ...
class Base
{
public:
Base(int h);
virtual ~Base();
private:
int hType;
Base *hHandle;
};
class Derived1 : public Base
{
public:
Derived1();
virtual ~Derived1();
};
class Derived2 : public Base
{
public:
Derived2();
virtual ~Derived2();
};
Base::Base(int h)
{
hType = h;
switch(h)
{
case 1:
hHandle = new Derived1;
break;
case 2:
hHandle = new Derived2;
break;
}
}
Derived1::Derived1():Base(1)
{
printf("\nDerived1 Initialized\n\n");
}
Derived2::Derived2():Base(2)
{
printf("\nDerived2 Initialized\n\n");
}
A continuación se actualiza para mostrar el código fuente completo de la . Creo que ahora entiendo por qué no compilará. Como se señala más adelante, tengo un bucle sin fin de llamadas a 'nuevo'
#include <stdio.h>
class Base
{
public:
Base();
Base(int h);
Create (int h);
virtual ~Base();
private:
int hType;
Base *hHandle;
};
class Derived1 : public Base
{
public:
Derived1();
virtual ~Derived1();
};
class Derived2 : public Base
{
public:
Derived2();
virtual ~Derived2();
};
Base::Base()
{
}
Base::Base(int h)
{
Create(h);
}
Base::Create(int h)
{
hType = h;
switch(h)
{
case 1:
hHandle = new Derived1;
break;
case 2:
hHandle = new Derived2;
break;
}
}
Derived1::Derived1()
{
printf("\nDerived1 Initialized\n\n");
}
Derived2::Derived2()
{
printf("\nDerived2 Initialized\n\n");
}
¿Cuál es el texto del error? Si se refiere a la primera línea del fragmento de código, eso * no * se ve * incorrecto. – ssube
¿Qué hay del tiempo de ejecución? Cuando creas una Base (1), el constructor crea una nueva Derivada, que llama a su clase base, Base (1), que crea una nueva Derivada, que llama a su clase base ... –
@Eric: usa cualquiera de los 'std' :: unique_ptr', 'boost :: scoped_ptr' o' std :: auto_ptr' (siendo este último el peor). Tiene una pérdida de memoria en su muestra de juguete:/ –