IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

surcharge/redefinition de méthodes avec utilisation dclasse générique


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 105
    Points : 61
    Points
    61
    Par défaut surcharge/redefinition de méthodes avec utilisation dclasse générique
    matrice.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Il faut sans doute déclarer la fonction virtual et lui dire de renvoyer le bon type.
    En tout cas, ton code n'a pas un design optimal, tu ferais sans doute mieux de traiter tes matrices comme des objets et non pas renvoyer des pointeurs. Lorsqu'un objet contient un pointeur vers une instance de lui-même, on a plutôt affaire à une hirérachie, ce qui n'est pas du tout le cas ici.
    Ensuite, dans ton fichier .cpp, tu as des définitions de fonctions template, c'est pas bon non plus, elles devraient être au même endroit que la déclaration de la fonction.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 105
    Points : 61
    Points
    61
    Par défaut
    ok, en gros je ne suis pas parti sur le bon pied :s
    sachant que le programme est quasiment fini ça me desespère un peu

    enfin merci pour le conseil

Discussions similaires

  1. Probleme reception avec utilisation de TComPort
    Par MDiabolo dans le forum C++Builder
    Réponses: 6
    Dernier message: 19/02/2006, 20h21
  2. Pb avec utilisation UPDATEsous VBA
    Par frevale dans le forum Access
    Réponses: 7
    Dernier message: 07/11/2005, 23h56
  3. TForm dans une DLL avec utilisation d'Interface
    Par guedelmalin dans le forum Langage
    Réponses: 13
    Dernier message: 17/06/2005, 11h58
  4. Réponses: 7
    Dernier message: 18/12/2003, 10h23
  5. prob avec utilisation de package
    Par martijan dans le forum Modules
    Réponses: 13
    Dernier message: 11/07/2003, 09h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo