LocalStone
Messages postés514Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention 1 mars 2009
-
31 mai 2006 à 01:12
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 2008
-
31 mai 2006 à 14:50
Bonsoir à tous ...
Alors voilà ... J'ai une classe Matrix qui possède - entre autre - les
propriétés Height et Width, qui correspondent respectivement à la
hauteur et à la largeur d'une matrice. J'ai aussi une classe Vector qui
hérite de la classe Matrix, sachant qu'en fait un vecteur n'est qu'une
simple matrice dont la propriété Height vaut 1.
Du coup, je me suis mis en tête de coder deux opérateurs de cast pour
passer de Matrix à Vector si cela est possible, et de Vector à Matrix,
sachant que cela est également toujours possible. Mais là, le
compilateur me sort que ce n'est pas utile .
Alors que dois-je faire ? Y a-t-il une solution autre que de créer des méthodes statiques telles que ToVector ou ToMatrix ?
Mais ce n'est pas terminé ! ...
Dans la classe Matrix, j'ai surchargé l'opérateur arthmétique +. Ainsi,
si A et B sont 2 matrices, alors A + B retourne une matrice. Mais le
problème, c'est que si A et B sont 2 vecteurs, alors A + B va retourner
une matrice et non un vecteur, sauf si je recommence à surcharger cet
opérateur dans la classe Vector. Or j'aimerais éviter ça, puisque c'est
justement pour ça que j'ai voulu que Vector hérite de Matrix. Alors
est-il possible d'effectuer une sorte de cast automatique ou quelque
chose comme ça ?
LocalStone
Messages postés514Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention 1 mars 2009 31 mai 2006 à 14:32
Bah en quelque sorte, oui, mais ... Euh ... Sauf ton respect ... C'est moche !
Parce que dans ce cas là, si par exemple la multiplication de la matrice a et de la matrice b donne une matrice de largeur 1 et que l'on le sait ... Alors :
Vector v;
v = (Vector)(a * b);
Bah c'est plus joli à mon gout que :
Vector v;
v = new Vector(a * b);
Mais au pire ... Si tu penses qu'il n'y a pas d'autres solutions, je vais faire ça. Mais c'est dommage. Y a une faille dans le C#, là !
LocalStone
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 31 mai 2006 à 14:50
Ce n'est pas particulierement une faille de C#, ni des autres langages objets d'ailleurs... mais disons que tu cherches à faire du "polymorphisme allez retour", en pouvant convertir librement n'importe quel object "pere" en "fils", et inversement...
Tu as la possibilité de faire des cast explicites entre objets... mais ca ne marche pas pour les objets qui dérivent l'un de l'autre. Ce qui en soit reste assez logique... Un vecteur étant par définition une matrice "spécialisée", tu ne pas dire simplement qu'une matrice est un vecteur... il te faut pour cela un appel de fonction explicite pour "transformer" ta matrice en vecteur (comme l'appel au constructeur, ou n'importe quel autre méthode que tu pourrai utiliser pour faire la même chose)..
Tout ça pour dire que "ça s'explique" et que c'est certainement voulu. Mais je suis d'accord avec toi, à partir du moment ou le langage offre la possibilité de caster une carrotte en voiture, alors autant qu'il offre la possibilité de caster un légume en carrotte ...