Class derivée, Surcharge, Template ???

nawakator Messages postés 51 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 8 février 2011 - 13 mai 2005 à 09:16
nawakator Messages postés 51 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 8 février 2011 - 13 mai 2005 à 17:10
J'ai créer 1class de Base class cTask et 2 class dériver : class cTaskA:cTask et class cTaskB:cTask;
La class de Base est virtuel;

Je les stockent dans une liste chaînées Template. J'ai déclarer TLstCh<cTask> mavariable; (TLstCh est mon template). Pour stocker les données pas de problème je peut créer plusieurs tâches de type différents ( toujours différent de la class de base) . Mais lorsque je veut récupérer les données le compilateur me dit que je ne peut pas appelé les fonctions des class dériver cTaskB ou cTaskA car pour lui le template stock des class de base cTask.

Comment utiliser la surcharge de fonction!!

Si quelqu'un pouvait m'aider sur ce point; je suis complètement perdu.!!!

Merci!!

2 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
13 mai 2005 à 10:37
Pour accéder aux fct de A et B il faut les déclarer virtual dans CTask car le compilo se sert de cette classe. Au runtime, ce sera la version A ou B sui sera appelée en fct de la classe réeele des objets.

dans CTask :
virtual void MaFct(); (rajoute =0 pour en faire une classe virtuelle pure, ce qui oblige les classes dérivées à implémenter cette fct)

dans A et B :
virtual void MaFct(); avec son implémenation spécifique.
0
nawakator Messages postés 51 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 8 février 2011
13 mai 2005 à 17:10
Meric pour ta réponse!

Ce que je ne comprends pas, c'est : quelles fonctions doivents ête mis en virtuel pure? Es-ce les fonctions commune ce trouvant dans la class de base ou toutes les fonction des cTaskA et cTaskB.
J'avais déjà essayer cette solution, mais 3 problèmes ce posent :
1 - Si je rajoute une fonction dans une class dérivée je doit donc rajouter une fonction virtuel pur dans la class de base? du coups si une fonction est virtuel dans la class de base et que je l'implémente dans la class A, elle sera toujours virutel dans la class B!!
2 - Le complilateur refuse d'exécuter. Lorsque je tente de récupérer une fonction d'une class dérivée il me dit que la class cTask ne connait pas les fonctions des class dérivéés ( ce qui me semble normal ! ).
3 - Le compliteur refuse de déclarer TLstCh<cTask> car la class de base cTask et virtuel ( ce qui me semble normal aussi !).!

Je suis sûr qu'il y a moyen de créer un liste chaîné avec différent type de class si celle-ci sont dériver d'une class de base; mais je n'arrive pas à m'en sortie!!!!
0
Rejoignez-nous