Class derivée , Template ( POURQUOI ES-CE CI DIFFICILE) ???

Résolu
nawakator Messages postés 51 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 8 février 2011 - 19 mai 2005 à 13:37
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 19 mai 2005 à 16:35
J'ai déjà posé cette question, mais je la repose car elle est essentiel pour mon projet!

J'ai créer un template permettant de géré une liste chainé de class.
Seullement je voudrait créer une liste chaîne avec différente class.
Elément 1 de type Classe B
Elément 2 de type Classe B
Elément 3 de type Classe D
Elément 4 de type Classe B
Elément 5 de type Classe C

Toutes c'est classe sont dériver d'une est même class A qui est virtuel ou virtuel pure selon mes test:

3 problèmes ce posent :
1 - Si je créer ma class A virtuel pure et 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!! et je ne pourrais pas utiliser ma 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 B ou C ne connait pas les fonctions des class dérivéés ( ce qui me semble normal ! ).
3 - Le compliteur refuse de déclarer TLstCh<class A> (TLstCh étant ma class template) car la class A de base est 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!!!!

4 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
19 mai 2005 à 16:35
Oui une classe doit implémter toutes les classes vituelles pures de sa
mère sinon elle est elle même abstraite. C'est logique, sinon que
devrait faire le compilateur quand tu appelles fn pour un objet de
class C?

Pour ton problème de liste, je t'ai dit: il faut que tu utilise une list au lieu d'une list
3
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
19 mai 2005 à 14:42
"1 - Si je créer ma class A virtuel pure et 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!! et je ne pourrais pas utiliser ma
class B."



Qu'est ce que tu racontes :) SI ta classe A est virtuelle pure,c'est
qu'elle contient deja une fonction virtuelle pure. Ta fonction que tu
peux ajouter dans la classe dérivée, tu la déclares virtuelle pure dans
la classe de base. Tu la déclares évidemment "virtual" dans ta classe
dérivée, mais tu peux évidemment l'utiliser. En gros ca donne ce schéma:



class A

virtual type fn() = 0



class B

virtual type fn() { } // utilisable

Enfin post du code en résumé, c'est plus simple :)

Si je comprend, tu déclares ton objet 1 ainsi:

TA_CLASS< "classe B" > Element 1;



c'est ca ?



"géré une liste chainé de class." plutot une liste chainé d'objet de class non ?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
19 mai 2005 à 15:09
Pour jouer avec les fonctions virtuelles, tu doit obligatoirement
utiliser des pointeurs: un objet de type A appartient toujours à la
classe A, mais un object de type A* peut être en fait de type B*. Comme
A ne peut être instanciée, impossible de crée une list
0
nawakator Messages postés 51 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 8 février 2011
19 mai 2005 à 16:23
Merci à tous, mais je du mal à m'exprimer !

Le problème c'est que si je ne peut pas créer list dans ce cas je suis obligé de créer list list<C> etc...

Donc je pert l'éfficacité d'avoir une seul liste.

De plus
Si je fait

class A
virtual type fn() = 0

class B
virtual type fn() { } // utilisable

dans ce cas ma class C : public Class A et toujours virtuel pure. Chaque fois que je créer un nouvelle fonction çà veut dire que je suis obliger le l'implémenter dans B et C ???! Je suis pas sur d'avoir encore tout compris.

En tout cas merci car je peut maintenant un peut plus avancer.
0
Rejoignez-nous