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:
Supponiamo poi che io da questa classe tramite ereditarietà ne crei n (per esempio: sfera, cubo, cilindro, ecc...)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; };
Nella reimplementazione del metodovorrei fare un switch per comportarmi in maniera diversa a seconda del tipo di other.codice:Collision(RigidBody& 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
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++.codice:Class RigidBody { ....... protected: std::string _type; // == rigidbody, sphere, cube, ecc... };
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

Rispondi quotando
