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 :

Polymorphisme + New


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Par d�faut Polymorphisme + New
    Les classes:
    J'ai une classe abstraite Individu puis deux classes h�ritant de cette classe Individu, Homme et Femme.

    Maintenant j'ai une classe listIndividu et j'ai envie de cr�er une fonction
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    class listIndividu
    {
    public:
    Individu * list;
    Individu * new_individu_size(Individu * ind,int n)
    {
       return list =  new ???[ n]; // la je veux créer n femmes ou hommes 
    //selon la liason du pointeur dynamique
     
    }
    };
    int main()
    {
    Femme* f;
    listIndividu list;
    list.new_individu_size(f,3);
     
    }
    Comment faire???

  2. #2
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Par d�faut
    Est-ce assez clair???

  3. #3
    Membre chevronn�
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Par d�faut
    Citation Envoy� par vincho
    Est-ce assez clair???
    Pas vraiment, tu veux faire quoi exactement? Une liste cha�n�e d'individus?

    Remarque que pour utiliser le polymorphisme avec un tableau, tu es oblig� d'utiliser un tableau de pointeurs:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    Individu *tab[2];
    tab[0] = new Femme();
    tab[1] = new Homme();
    Pour t'aider plus pr�cis�ment il faudrait plus d'informations sur ce que tu essaies de faire...

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Par d�faut
    Je veux cr�er une liste d'individu correspondant au pointeur de la liaison dynamique de l'argument de la fonction new_individu_size.

    En v�rit�, je travaille en traitement d'images, et je voudrais cr�er une image qui est une liste de voxel sachant que les voxels peuvent �tre diff�rents.
    donc:
    une fonction new_voxel_size quelques soient le voxel

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Par d�faut
    Et � la compilation je ne sais pas quel type de voxel ou d'individu (Homme ou femme), la liste va contenir.

    C'est � l'�x�cution que la lister va cr�er une liste de femme ou d'homme...

    c'est pourquoi je veux faire appel � une fonction:
    new_individu_size(Individu * ind,int n)
    et selon le lien dynamique creer le bon type

  6. #6
    Membre chevronn�
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Par d�faut
    Ton image tu connais sa taille, elle a par exemple m*n voxels? Dans ce cas, comme j'ai fais plus haut, tu pourrais faire un tableau de pointeurs de taille m*n.

  7. #7
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    De toute �vidence c'est ton instance qui va savoir si elle est un homme ou une femme ; c'est donc � elle qu'il va falloir demander de cr�er des instances du m�me type. C'est en quelque sorte une extension du design pattern du clone.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    class Individu
    {
    public :
     
        virtual Individu* Clone(int Count) = 0;
    };
     
    class Homme : public Individu
    {
    public :
     
        virtual Individu* Clone(int Count) {return new Homme[Count];}
    };
     
    class Femme : public Individu
    {
    public :
     
        virtual Individu* Clone(int Count) {return new Femme[Count];}
    };
     
    Individu * new_individu_size(Individu * ind, int n)
    {
        if (ind)
            return ind->Clone(n);
        else
            return NULL;
    }

  8. #8
    Membre chevronn�
    Inscrit en
    Novembre 2006
    Messages
    362
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par d�faut
    Citation Envoy� par vincho
    Comment faire???
    Tu peux faire ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class listIndividu
    {
    public:
    	Individu * list;
    	template<typename T>
    	Individu * new_individu_size(T* ind,int n)
    	{
    	   return list =  new T[ n];
    	   // ici tu remplis ton tableau
    	}
    }
    Mais ton code est bizare, on peut imaginer un cas dans lequel ce conteneur que tu fais ait un sens, mais il s'agit d'un cas tout de m�me assez alambiqu�.

    Le code que j'ai �cris ci-dessus compile et peut marcher, si tu sais VRAIMENT ce que tu fais. Mais c'est pas tr�s joli joli.

    Si tu d�butes en C++ et que tu veux utiliser un tableau de taille variable, tu devrais te documenter ici
    plutot que d'essayer d'en faire un toi-m�me.

  9. #9
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Par d�faut
    Merci de vos r�ponses:

    Je vais garder la solution de Feriaman car elle me permet de ne pas d�finir pour chaque class Homme, Femme, enfants, chiens, cochons... la fonction clone que me propose Laurent Gomila.

    Encore Merci,
    Ca compile, Youpi!!!!!!!!!!

  10. #10
    Membre chevronn�
    Inscrit en
    Novembre 2006
    Messages
    362
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par d�faut
    J'aurais mieux fait de me taire.

    Le code que j'ai �cris ci-dessus compile et peut marcher, si tu sais VRAIMENT ce que tu fais. Mais c'est pas tr�s joli joli.
    Ma "solution" n'est pas bonne, et elle va poser un certain nombre de probl�mes par la suite.

    Notament, tu vas devoir caster ta liste avant de t'en servir.
    Tu ne dois pas utiliser cette solution.

  11. #11
    Membre chevronn�
    Inscrit en
    Novembre 2006
    Messages
    362
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par d�faut
    J'explicite : ta variable list "croit" qu'elle pointe sur un tableau de A, alors qu'elle pointe sur un tableau de B, elle n'est donc pas capable de retrouver ses propres �l�ments, du coup, ce code :
    renvoie n'importe quoi et surtout pas le second �l�ment du tableau.

    Le premier �l�ment du tableau serait renvoy� par exemple par :
    si c'est un tableau de femmes.

    C'est tr�s moche comme solution.

  12. #12
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    77
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 77
    Par d�faut
    Merci, je vais donc implanter clone dans chacune des classes!!!!

    Je croyai que la force de C++ �tait de pouvoir s'abstenir d'�crire n fois la m�me fonction; ici clone.
    J'aurai du rester au C pure

Discussions similaires

  1. Polymorphisme, new et reference
    Par Bouteille dans le forum Langage
    R�ponses: 5
    Dernier message: 11/01/2012, 12h08
  2. R�ponses: 4
    Dernier message: 24/03/2004, 12h37
  3. Database new user & create table
    Par MFDev dans le forum InterBase
    R�ponses: 3
    Dernier message: 30/09/2003, 20h47
  4. Bug new build ??
    Par rgarnier dans le forum XMLRAD
    R�ponses: 4
    Dernier message: 31/01/2003, 10h30
  5. [] Insérer DE et Datareport existant ds new projet
    Par khany dans le forum VB 6 et ant�rieur
    R�ponses: 2
    Dernier message: 10/01/2003, 09h52

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