Salve a tutti, scusate per il titolo ma non riuscivo a trovarne uno più esplicativo.
Supponiamo di avere una classe base, con un metodo virtuale:
codice:
#include "mathvector.h" //classe scritta da me che rappresenta un vettore matematico
class RigidBody
{
public:
RigidBody();
virtual ~RigidBody();
//setter
inline void setPosition(MathVector s){_p = s;}
inline void setVelocity(MathVector v){_v=v;}
inline void setMass(double m){_m = m;}
//getter
inline MathVector position() const {return _pos;}
inline MathVector velocity() const {return _v;}
double mass() const {return _m;}
//virtuals
virtual void Collision(RigidBody& other) =0;
protected:
double _m;
MathVector _pos;
MathVector _v;
};
Supponiamo poi che io da questa classe tramite ereditarietà ne crei n (per esempio: sfera, cubo, cilindro, ecc...)
Nella reimplementazione del metodo
codice:
Collision(RigidBody& other)
vorrei fare un switch per comportarmi in maniera diversa a seconda del tipo di other.
per esempio se il mio ogetto è una sfera e gli passo un'altra sfera, dovrò comportarmi in maniera diversa rispetto al caso in cui other sia un cubo.
Per far questo avevo pensato di inserire una proprietà stringa in sola lettura che contenga il tipo
codice:
Class RigidBody
{
.......
protected:
std::string _type; // == rigidbody, sphere, cube, ecc...
};
Però mi sembra strano che non ci sia un modo per controllare cosa sia other senza dover per forza occupare altra memoria, magari sono io che non ricordo come si fa, e che non riesco a ritrovarlo nel mio manuale di C++.
vi è mai capitata una situazione simile?
Ciò che voglio fare è possibile?
Inserire quella proprietà è un buon metodo?
Potrei aggirare il problema modificando l'implementazione?
A voi esperti la parola