Por ejemplo, en la función principal, quiero obtener la entrada del usuario. Según la entrada, crearé Rectangle
o Circle
, que son clases secundarias de Object
. Si no hay datos de entrada (o desconocidos), entonces crearé un objeto genérico.¿Cómo crear instancias de diferentes clases secundarias de forma condicional?
class Object
{
public:
Object();
void Draw();
private:
....
};
class Rectangle:public Object
{
public:
Rectangle();
.... //it might have some additional functions
private:
....
};
class Circle:public Object
{
public:
Circle();
.... //it might have some additional functions
private:
....
};
función principal:
string objType;
getline(cin, objType);
if (!objType.compare("Rectangle"))
Rectangle obj;
else if (!objType.compare("Circle"))
Circle obj;
else
Object obj;
obj.Draw();
Por supuesto, el código anterior no funcionará porque no puedo crear una instancia de un objeto dentro de una instrucción If. Así que intenté algo como esto.
Object obj;
if (!objType.compare("Rectangle"))
obj = Rectangle();
else if (!objType.compare("Circle"))
obj = Circle();
obj.Draw();
Este código se compilaría, pero no hará lo que yo quiera. Por alguna razón, el objeto no se inició de la misma forma que la clase hija (por ejemplo, establecí las variables miembro de un Objeto, específicamente, un vector, de manera diferente en las clases secundarias). Sin embargo, cuando puse un punto de ruptura en el constructor de la clase Child, se ejecutó allí.
Entonces, ¿cómo debería poner objetos instanciados como sus clases secundarias en algunas sentencias if?
¡Funciona! Además de la solución a mi problema, gracias por dar una buena explicación de cómo funcionan las clases y el puntero en C+++. – tuzzer