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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.