Héritage et Polymorphisme - Peut-on éviter un dynamic cast ?
Bonjour
J'ai un petit problème avec une structure Vector que je suis en train de faire. J'ai donc une structure Vector :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
struct Vector
{
private :
...
public :
...
double getNorm() const;
Vector * getUnitVector() const;
}; |
J'ai également une structure Vector2D qui hérite de ma structure Vector :
Code:
1 2 3 4 5 6 7 8 9
|
struct Vector2D : public Vector
{
private :
....
public :
....
}; |
Dans la structure Vector se trouve une méthode getUnitVector() qui retourne un vecteur unitaire correspondant au vecteur interne.
Code:
1 2 3 4 5 6 7 8 9
|
Vector * Vector::getUnitVector()
{
// Create the unit length vector
Vector * unitVector = (1.0 / this->getNorm()) * this;
// Return the unit length vector
return unitVector;
} |
Mon problème est que j'aimerais avoir une expression du genre :
Code:
1 2 3
|
Vector2D * vect = new Vector2D();
Vector2D * vect2 = vect->getUnitVector(); |
Le problème est que la méthode getUnitVector() se trouve dans la classe Vector et retourne donc un pointeur Vector * et donc la deuxième instruction pose problème car un Vector * ne peut pas être assigné à un Vector2D *. Il faudrait ici un "dynamic cast". Mais je ne trouve pas vraiment beau d'utiliser dynamic cast et j'imagine qu'il doit exister quelque chose de beaucoup plus propre pour ce genre de problème qui me parait assez classique.
Si quelqu'un saurait comment si prendre dans ce genre de situation.