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

Langage C++ Discussion :

Récursion de classes avec héritage


Sujet :

Langage C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 51
    Points : 38
    Points
    38
    Par défaut Récursion de classes avec héritage
    Bonjour,

    je vous expose le probleme sur lequel je suis confronte.

    Je possede la structure suivante:

    - une classe ObjBase;

    - une classe derivee ObjDerivee (public ObjBase) qui contient comme membre 1 smart pointer d'objet de type ObjBase (disons qu'il s'appelle m_spSubObjDerive)

    J'ai une fonction virtuelle dans ObjBase, disons que cette fonction s'appelle WriteNameObj() et elle contient un appel a m_spSubObjDerive->WriteNameObj().

    Par exemple ca donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void ObjBase::WriteNameObj()
    {
         m_spSubObjDerive->WriteNameObj();
         cout<<"ACTION BASE";
     
    }
     
    void ObjDerivee::WriteNameObj()
    {
         m_spSubObjDerive->WriteNameObj();
         cout<<"ACTION DERIVEE";
     
    }
    Mon problème est le suivant:

    je suis dans une situation récursive ou j'ai un objet de type ObjDerivee qui a comme membre m_spSubObjDerivee qui pointe sur un objet de type ObjDerivee qui lui-meme a un membre m_spSubObjDerivee qui pointe sur un objet de base cette fois-ci.

    J'ai donc ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ObjBase::sp spMyBaseObj ();
    ObjDerivee::sp spMyObject1(spMyBaseObj);
    ObjDerivee::sp spMyObject2(spMyObject1);
    Maintenant si je fait l'appel suivant:

    spMyObject1->WriteNameObj() je voudrait que ca ecrive "ACTION BASE", puis "ACTION DERIVEE".

    Par contre si j'appelle spMyObject2->WriteNameObj(), je voudrais que ca ecrive "ACTION BASE" et une seule fois "ACTION DERIVEE" pour l'appelle de plus haut niveau.

    Je sais pas si c'est clair, mais en gros je voudrais pouvoir faire une action seulement si l'appel s'est fait de la classe de plus haut niveau (ou plus bas suivant comment on le voit ).

    Merci d'avance pour votre aide !!!

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 041
    Points
    33 041
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    je ne suis pas sûr d'avoir compris, mais :
    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
    void ObjBase::WriteNameObj()
    {
         m_spSubObjDerive->WriteNameObj();
         cout<<"ACTION BASE";
    }
    void ObjBase::WriteNameObjOnly()
    {
        cout<<"ACTION BASE";
    }
     
    void ObjDerivee::WriteNameObj()
    {
         m_spSubObjDerive->WriteNameObjOnly();
         cout<<"ACTION DERIVEE";
    }
    ne serait-il pas ce que tu cherches ?
    Moyennant que ton héritage/polymorphisme et virtual soient corrects.
    Il faudra surement faire la même chose pour ObjDerivee après.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 51
    Points : 38
    Points
    38
    Par défaut
    Salut,

    alors non c'est pas ca que je veux car la tu casses la recursion en fait...

    Moi j'ai trois objets:
    - un objet1 de type de base,
    - le second (objet2) de type derive avec comme membre un pointeur sur un objet de base (objet1),
    - puis un troisieme, objet3, de type derive aussi, avec un pointeur sur l'objet2.

    Il faut que la recursion marche du haut jusqu'en bas, la seule difference c'est que je voudrais qu'une action particuliere ne soit realisee uniquement par les objets de classe derivee si il s'agit de la classe de plus haut degre.

    Donc, si j'appelle ma fonction avec le pointeur sur Objet2, l'action se realise.
    Par contre, si j'appelle ma fonction avec le pointeur sur Objet3, l'action ne se realisera pas lorsque la fonction sera appele du pointeur sur l'objet2.

    C plus clair??

    En fait, je veux un moyen de savoir si mon appel s'est fait par le membre ou par la classe elle-meme, les 2 ayants le meme type (derive).

    Merci.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 041
    Points
    33 041
    Billets dans le blog
    4
    Par défaut
    En ce cas, utilise un 2° paramètre type int qui définit le niveau de la classe appelante.
    A 1 par défaut pour la classe de base, à 2 par défaut pour la classe dérivée par exemple. Niveau que tu incrémentes à chaque appel.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 51
    Points : 38
    Points
    38
    Par défaut
    Oui, c'est la solution a laquelle j'avais pense a un moment, mais je trouvais ca moche d'avoir un parametre par default dans une fonction qui est assez importante dans mon code ...

    mais bon, si y-a pas mieux comme solution, va bien falloir que je m'adapte

Discussions similaires

  1. Appel d'une méthode sur une classe avec héritage
    Par SasakiKojiro dans le forum Général Java
    Réponses: 13
    Dernier message: 17/04/2015, 18h56
  2. Instanciation d'une classe avec héritage QSettings
    Par bigtouf dans le forum Débuter
    Réponses: 2
    Dernier message: 11/10/2011, 21h44
  3. Système de classe, avec héritage multiple dynamique
    Par kimjoa dans le forum Contribuez
    Réponses: 0
    Dernier message: 09/01/2010, 18h07
  4. [JUnit] Classe de test avec héritage et appel du constructeur
    Par LuckyLiam dans le forum Tests et Performance
    Réponses: 2
    Dernier message: 23/04/2009, 09h36
  5. Erreur du designer avec héritage d'une classe abstraite
    Par Xzander dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/04/2007, 00h36

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