Cuando manejamos herencia, a veces es necesario poder diferenciar entre varias clases heredadas. Una forma ordenada de hacerlo, es declarar una variable tipo que nos identifique con que clase estamos trabajando. Otra opción es realizando un casting dinámico para aprovechar las propiedades RTTI (Run-time type information) de los objetos de C++. Si el casting nos regresa NULL es que no es del tipo que nos interesa.
A continuación presento un ejemplo que ilustra esta técnica:
using namespace std;
class Figura {
public:
// Es importante que la clase base sea polimorfica agregándole al menos una función virtual:
virtual ~Figura() { };
};
class Triangulo : public Figura {
};
class Cuadrado : public Figura {
};
main() {
Figura *figura1 = new Cuadrado;
Figura *figura2 = new Triangulo;
if ( dynamic_cast<Cuadrado *>( figura1 ) )
cout <<"La figura1 es un Cuadrado" <<endl;
else if ( dynamic_cast<Triangulo *>( figura1 ) )
cout <<"La figura1 es un Triangulo" <<endl;
if ( dynamic_cast<Cuadrado *>( figura2 ) )
cout <<"La figura2 es un Cuadrado" <<endl;
else if ( dynamic_cast<Triangulo *>( figura2 ) )
cout <<"La figura2 es un Triangulo" <<endl;
return 0;
}
Aquí lo puedes ver en acción: http://www.ideone.com/xAmv72e5