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 :

Regroupement de classe polymorphiques


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Inscrit en
    Septembre 2006
    Messages
    113
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 113
    Par d�faut Regroupement de classe polymorphiques
    Bonjour � tous

    J'ai � ma disposition un ensemble de classe polymorphiques

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class A: public M{
    virtual T_A data_A_
    void setData (T_A)
    ...
    };
     
    class B:public A{
    T_B data_B_
    B(T_B) // constructeur
    ...
    };
    o� T_A et T_B sont des types (peu importe)

    Actuellement je peux �crire
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    T_B data_B;
    B b(data_B);  // je construis mon objet B dérivé de A
    T_A data_A1;
    b.setData(data_A1); // j'assigne data_A1 dans la structure mère A
    Si je rajoute la ligne suivante
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    T_A data_A2
    b.setData(data_A2);
    �a va fonctionner mais je vais �craser data_A1
    Ca ne m'arrange (�videmment) pas !!!

    Ce que je voudrais faire, c'est initialiser mon objet B avec ses donn�es membres (de type data_B), mais pouvoir avoir deux sets de donn�es data_A (donc sans �crasement de data_A1)


    Les contraintes que j'ai sont:
    Je ne peux pas toucher au code de A et B pcq ce n'est pas developp� par moi et je suis d�pendant des �ventuels releases futures


    Voici donc les solutions que j'ai trouv� jusqu'� pr�sent:
    1�re solution:
    modif de la classe A:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class A: public M{
    T_A data_A1_;
    T_A data_A2_;
    void setData1(T_A);
    void setData2(T_A);
    ...
    };
    ca devrait fonctionner mais ca ne satisfait pas � ma contrainte...:-/

    2�me solution:
    cr�ation d'une classe "regroupement"
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    class X{
    A a1_;
    A a2_;
    };
    �a devrait aussi fonctionner mais l� par contre je ne vois du tout comment �crire un objet de type B tel que:
    * les donn�es de type data_B passe dans la structure B
    * je puisse passer faire varier les variables de type T_A

    3�me solution:
    la votre :-)

    David

  2. #2
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par d�faut
    Citation Envoy� par dhoorens Voir le message
    Je ne peux pas toucher au code de A et B pcq ce n'est pas developp� par moi et je suis d�pendant des �ventuels releases futures
    Citation Envoy� par dhoorens Voir le message
    modif de la classe A:

  3. #3
    Membre confirm�
    Inscrit en
    Septembre 2006
    Messages
    113
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 113
    Par d�faut
    Citation Envoy� par Noxen Voir le message
    Ben c'�tait pour proposer une solution :-)

  4. #4
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Si j'ai bien compris, ton probl�me est que data_B_ est initialis� � la construction et ensuite tu n'as pas d'interface pour le modifier (au contraire de data_A_).
    Bon, comment est g�rer l'op�rateur = par class B?

  5. #5
    Membre confirm�
    Inscrit en
    Septembre 2006
    Messages
    113
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 113
    Par d�faut
    Citation Envoy� par 3DArchi Voir le message
    Si j'ai bien compris, ton probl�me est que data_B_ est initialis� � la construction et ensuite tu n'as pas d'interface pour le modifier (au contraire de data_A_).
    Bon, comment est g�rer l'op�rateur = par class B?
    Il n'a pas d'operateur = d�fini au niveau de class B
    Par contre cet operateur est defini au niveau de class O1 avec O1 tel que
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class O1{};
    class O2{};
    class M: public O1, public O2{};
     
    class A: public M{
    //classe abstraite telle que definie plus haut
    };

  6. #6
    Membre chevronn�
    Inscrit en
    Ao�t 2004
    Messages
    556
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2004
    Messages : 556
    Par d�faut
    Il n'y a pas de solution miracle.

    Si ton B ne pet contenir qu'une seule copie de T_A alors il n'en contiendra qu'une seule.

    Si tu veux qu'il puisse contenir 2 copies de T_A diff�rents il te faut modifier setData et utiliser un vector.

    Ceci dit, j'ai bien mis en �vidence que dans ton code actuel tel que tu le montres, tu fais des copies � chaque fois.

    Donc si tu fais
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    T_A t_a1;
    T_A t_a2;
    b.setData(t_a1);  // &b.t_a != t_a1
    b.setData(t_a2);
    b contiendra � la fin de code effectivement une copie de t_a2 mais t_a1 sera toujours existant.

  7. #7
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    D�tails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par d�faut
    Citation Envoy� par dhoorens Voir le message
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    class A: public M{
    virtual T_A data_A_
    ...


    Citation Envoy� par dhoorens Voir le message
    Ce que je voudrais faire, c'est initialiser mon objet B avec ses donn�es membres (de type data_B), mais pouvoir avoir deux sets de donn�es data_A (donc sans �crasement de data_A1)


    Moi je suis tr�s b�te, tu pourrais nous donner un exemple de ce que tu veux faire avec avec des int et des float ? Et pr�ciser ce que tu entends par "set de donn�es" ?

Discussions similaires

  1. R�ponses: 6
    Dernier message: 30/03/2009, 18h13
  2. faire de l'aller-retour dans class Polymorphique
    Par dhoorens dans le forum C++
    R�ponses: 5
    Dernier message: 20/08/2008, 22h12
  3. Conversion type dans class POlymorphique
    Par dhoorens dans le forum C++
    R�ponses: 11
    Dernier message: 18/06/2008, 14h49
  4. R�ponses: 4
    Dernier message: 21/05/2006, 21h01
  5. R�ponses: 8
    Dernier message: 18/04/2006, 12h16

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