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:
Mon problème est le suivant:
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"; }
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:
Maintenant si je fait l'appel suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ObjBase::sp spMyBaseObj (); ObjDerivee::sp spMyObject1(spMyBaseObj); ObjDerivee::sp spMyObject2(spMyObject1);
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 !!!
Partager