surcharge/redefinition de méthodes avec utilisation dclasse générique
matrice.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| template < typename Type > class Matrice{
public:
Matrice();
~Matrice();
//fusion avec une autre matrice, aux points 1 et 2 resprésentés par xi,yi,zi
//un pointeur sur la matrice résultat est renvoyé
Matrice<Type> *fusion(Matrice *matrice2, int x, int y, int z,int x2,int y2,int z2);
protected:
//crée un vecteur de vecteur de vecteur (dimension 3)
std::vector < std::vector< std::vector<Type *> > >mat;
Matrice *resultat;
}; |
matrice.cpp:
Code:
1 2 3
| template < typename T > Matrice<T>* Matrice < T >::fusion(Matrice *matrice2, int x, int y, int z,int x2,int y2,int z2){
...//fonction a executer
} |
De plus j'ai une classe monType, qui est le type d'objet a utiliser dans la matrice
dans mon programme principal, tout marche bien si je fais
Code:
1 2 3 4 5
| Matrice<monType> *mat;
Matrice<monType> *mat2;
Matrice<monType> *resultat;
....
resultat=mat->fusion(mat2,0,0,0,0,0,0); |
Seulement j'ai décidé de créer une classe qui gère ce type de matrice en incluant quelques fonction suppémentaires (ces fonctions marchent très bien).
Mais il se trouve que g tout de même un probleme:
MatriceMonType.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| class MatriceCube : public Matrice<MonType>
{
public:
MatriceMonType(void);
MatriceMonType*fusion(MatriceMonType*matrice2, int x, int y, int z,int x2,int y2,int z2);
//~MatriceCube(void);
...
protected:
...
}; |
avec dans le .cpp
MatriceCube::MatriceCube(void):Matrice()
{
}
La classe MatriceMonType, hérite donc de matrice, en spécifiant le type MonType.
J'aimerais pourvoir appeler la fonction fusion sur cette classe en lui donnant en paramètre la 2emem matrice a fusionner.
Pour cela, la classe MatriceMonType devrait appeler la méthode fusion de la classe parent et retourner la matrice résultat sous forme de MatriceMonType
J'ai déjà tenté plusieurs choses sans succès.
1 - ne pas mettre de fonction fusion dans la classe MatriceMontype: l fonction fusion sera celel d la classe parent. Le probleme est que le renvoi est un pointeur sur matrice<MonType>, et non pas sur MatriceMonType, ce qui peut proser des pertes d'information lors d'un cast vzers un MatriceMonType.
2- redéfinir et surcharger la méthode fusion dans la classe fille:
MatriceMonType*fusion(MatriceMonType*matrice2, int x, int y, int z,int x2,int y2,int z2);
qui appelle la méthode de meme nom dans la classe mere (Matrice::fusion), mais se pose encore les problemes de muvais arguments (Matrice::fusion necessite un matrice<Type> or un MatriceMonType est passé. De plus, l'écriture Matrice::fusion(...) provoque une erreur car interprété comme un appel a une fonction statique.
en bref je suis plus ou moins perdu et j'aimerais avoir une solution simple sans pour autant a avoir a réécrire de nombreuses lignes de code inutile.
2- d'autres solution trouves sur internet mais qui ne donnent pas satisfaction, car ne corrigant pas ou partiellement le probleme)
merci pour votre aide.