Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2326 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  question sur les fonctions virtuelles

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

question sur les fonctions virtuelles

n°891468
da_s_monk
Awwwww! Good Job!
Posté le 05-11-2004 à 19:25:46  profilanswer
 

salut,
 
je voudrais savoir si l'on declare une fonction virtuelle dans une classe A, et que l'on a des classes B et C ki heritent de A, doit on obligatoirement declarer cette fonction dans les 2 classes.
exemple:
 

Code :
  1. class A
  2. {
  3. public:
  4.      virtual int toto()=0;
  5. }
  6. class B : public A
  7. {
  8. public:
  9.      int toto(){return 3;}
  10. }
  11. class C : public A
  12. {
  13. public:
  14.      void hehe();
  15. }


 
je pose cette question parceque ceci me prose problem a la compil dans visual:

Code :
  1. c:\src\xml.cpp(253) : error C2259: 'Sbox' : impossible d'instancier une classe abstraite à cause des membres suivants :
  2.         'void Element::RadioChangeStatus(void)' : fonction virtuelle pure non définie


 
si vous avez une solution pour eviter d'avoir a declarer la fonction dans chacune de mes classes ca serait cool.
 
merci de votre aide


Message édité par da_s_monk le 05-11-2004 à 19:26:37
mood
Publicité
Posté le 05-11-2004 à 19:25:46  profilanswer
 

n°891475
chrisbk
-
Posté le 05-11-2004 à 19:29:07  profilanswer
 

bin C derive de A et A a une fonction virtuelle pure, donc si tu veux instancier C il faut que C definisse ladite fonction
 
jvois pas le pb ?

n°891486
Panini
Posté le 05-11-2004 à 19:37:00  profilanswer
 

Ne confond pas fonction virtuelle et virtuelle pure.
 
Une fonction virtuelle pure telle que toto n'est pas définie. Dans ce cas, il faut faire comme chrisbk l'indique.
Une fonction virtuelle simple (pas de = 0) possède une définition, il n'est donc pas nécessaire de la déclarée dans les classes héritées, si tu veux surcharger le comportement.
 
C serait donc valide si tu vires le = 0 et si tu fournis la définition par défaut de toto dans A (mais dans ce cas A n'est plus une interface).


Message édité par Panini le 05-11-2004 à 19:37:15
n°891487
chrisbk
-
Posté le 05-11-2004 à 19:37:48  profilanswer
 

en c++ on ne parle pas d'interface mais de classe abstraite :o

n°891488
da_s_monk
Awwwww! Good Job!
Posté le 05-11-2004 à 19:39:20  profilanswer
 

Le probleme c ke je voudrai ne pas avoir a definir cette fonction dans des classe ki n'en on pas besoin.
je suis entrain de faire un systeme de fenetre avec des container et des elements style boutton ou textedit. et par exemple pour les radiobutton, g un element RadioContainer ki va contenir des element RadioButton.  
ces deux element sont derivé d'une classe principale ki contient un tableau de pointeur sur les elements du niveau du dessous. voila un bou de xml pour ilustrer:
<radiocontainer>
     <radiobutton value="hehe" caption="lala"/>
     <radiobutton value="hehe" caption="lala"/>
     <radiobutton value="hehe" caption="lala"/>
     <radiobutton value="hehe" caption="lala"/>
</radiocontainer>
 
donc par exemple le tableau d'elemetn de radiocontainer contient 4 pointeur vers radiobutton.
a savoir ke chaque element possede un pointeur vers son pere. donc radiobutton a un pointeur vers radiocaontainer.
le truc c ke g besoin ke radiocontainer appelle des fonctions de radiobutton et vice versa.
hors comme c de classe n'ont comme point commun ke ma classe principale, il faut ke je declare les fonction que chacune vont appelé chez l'autre en virtuelle.
definir ces fonctions dans c 2 classes ne me poserait pas pb si je n'avait pas un packet de classes autour ki n'ont pas besoin de ces fonctions specifique a c 2 classes.
 
voila j'espere ke c pas trop confu ce ke je raconte.

n°891494
da_s_monk
Awwwww! Good Job!
Posté le 05-11-2004 à 19:41:25  profilanswer
 

Panini a écrit :

Ne confond pas fonction virtuelle et virtuelle pure.
 
Une fonction virtuelle pure telle que toto n'est pas définie. Dans ce cas, il faut faire comme chrisbk l'indique.
Une fonction virtuelle simple (pas de = 0) possède une définition, il n'est donc pas nécessaire de la déclarée dans les classes héritées, si tu veux surcharger le comportement.
 
C serait donc valide si tu vires le = 0 et si tu fournis la définition par défaut de toto dans A (mais dans ce cas A n'est plus une interface).


 
ok c ce ke j'avais commencé a faire, mais la raison pour laquelle j'avais passer en virtuelle pure c ke comme la fonction doit retourner qqch ca foirer.
mais en y pensant si je surcharge ca devrait pas poser pb
je test
merci

n°891498
HelloWorld
Salut tout le monde!
Posté le 05-11-2004 à 19:45:15  profilanswer
 

Une fonction virtuelle pure peux aussi être définie. Virtuelle pure veut simplement dire "doit être redéfinie".


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°891501
kadreg
profil: Utilisateur
Posté le 05-11-2004 à 19:46:31  profilanswer
 

HelloWorld a écrit :

Une fonction virtuelle pure peux aussi être définie. Virtuelle pure veut simplement dire "doit être redéfinie".


 
exemple :o ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°891505
chrisbk
-
Posté le 05-11-2004 à 19:48:05  profilanswer
 


 

Code :
  1. virtual void toto::prout()=0
  2. {
  3.    cout<<"caca\n";
  4. }


 
[:itm]


Message édité par chrisbk le 05-11-2004 à 19:48:26
n°891506
kadreg
profil: Utilisateur
Posté le 05-11-2004 à 19:48:53  profilanswer
 

Ca marche ça ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
mood
Publicité
Posté le 05-11-2004 à 19:48:53  profilanswer
 

n°891507
HelloWorld
Salut tout le monde!
Posté le 05-11-2004 à 19:49:08  profilanswer
 


Code :
  1. class A
  2. {
  3. public:
  4.     virtual void t() = 0
  5.     {
  6.     }
  7. };


[:dawadtc]
Je sais, ça fait mal...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°891510
HelloWorld
Salut tout le monde!
Posté le 05-11-2004 à 19:50:04  profilanswer
 

Faut croire.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°891511
kadreg
profil: Utilisateur
Posté le 05-11-2004 à 19:50:50  profilanswer
 

Bon, je vais rajouter un test case alors [:spamafote]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°891513
chrisbk
-
Posté le 05-11-2004 à 19:52:45  profilanswer
 

ca compile, mais je sais pas trop a quoi ca sert [:zaib3k]

n°891517
HelloWorld
Salut tout le monde!
Posté le 05-11-2004 à 19:58:08  profilanswer
 

A rendre une classe abstraite.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°891519
chrisbk
-
Posté le 05-11-2004 à 19:58:53  profilanswer
 

bin y'a pas besoin de definir la fonction pour ca

n°891521
HelloWorld
Salut tout le monde!
Posté le 05-11-2004 à 20:02:03  profilanswer
 

Ben au cas ou c'est nécessaire.

Code :
  1. class A
  2. {
  3. public:
  4.     A() { ptr = new int[ 10 ]; }
  5.     virtual ~A() = 0
  6.     {
  7.         delete [] ptr;
  8.     }
  9. private:
  10.     int * ptr;
  11. };


Mais je suis d'accord, à part faire discuter sur les forums, y'a pas trop d'utilité.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°891536
da_s_monk
Awwwww! Good Job!
Posté le 05-11-2004 à 20:55:59  profilanswer
 

Bon pour finir: merci ca marche!

n°891539
Panini
Posté le 05-11-2004 à 20:59:14  profilanswer
 

HelloWorld a écrit :

Ben au cas ou c'est nécessaire.

Code :
  1. class A
  2. {
  3. public:
  4.     A() { ptr = new int[ 10 ]; }
  5.     virtual ~A() = 0
  6.     {
  7.         delete [] ptr;
  8.     }
  9. private:
  10.     int * ptr;
  11. };


Mais je suis d'accord, à part faire discuter sur les forums, y'a pas trop d'utilité.


 
En effet ^^.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  question sur les fonctions virtuelles

 

Sujets relatifs
[ VBA ] question con : remplir une lioste avec un tableau[VB] Question sur les ListBox
ptite question svp !To Webservice or to not webservice? that is the question
Question pointeursquestion sur excel??
Passage 1.3.1 à 1.4.2 : question socketQuestion sur switch qui deconne !! RESOLU
question conne de CQuestion Simple Access
Plus de sujets relatifs à : question sur les fonctions virtuelles


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR