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

  FORUM HardWare.fr
  Programmation
  C++

  Valeur par defaut et heritage + methode virtuelle

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Valeur par defaut et heritage + methode virtuelle

n°1751129
NounouRs
Non parce que c pas mon pied !
Posté le 25-06-2008 à 14:22:51  profilanswer
 

comment vous résoudriez ce problème d'heritage et de valeurs par défaut ? :
 

Code :
  1. class A
  2. {
  3. public :
  4.    virtual methode1(param1, param2);
  5. };
  6. class B : public A
  7. {
  8. public :
  9.    methode1(param1, param2 = 0);
  10. };
  11. B::methode1(param1, param2)
  12. {
  13.    //code
  14. }


 
 
Usage  
 
B monB;
monB.methode1(machin);
 
Là le compilateur me dit que la méthode1 ne prend pas 1 seul parametre (mais 2)
 
Les valeur par defaut ca ne marche pas avec la redefinition de classes virtuelles ?


Message édité par NounouRs le 25-06-2008 à 16:18:59
mood
Publicité
Posté le 25-06-2008 à 14:22:51  profilanswer
 

n°1751140
kyntriad
Posté le 25-06-2008 à 14:40:12  profilanswer
 

Bah la tu appeles methode 1 de A (qui d'ailleurs n'est pas définie).

 

Ca me parait donc un poil normal que ça compile pas.

 

edit: et aussi faudrait un type de retour à ta methode.
re-edit: moué apparement visual aime pas trop pour sa part, tu peux toujours surcharger methode1 mais bon ya p'tet mieux. Il me semble avoir lu quelque part que c'était un peu le mal de faire de l'héritage mélangé avec des params par défaut mais pas moyen de retrouver où.


Message édité par kyntriad le 25-06-2008 à 14:54:56

---------------
You can't start a fire with moonlight
n°1751193
NounouRs
Non parce que c pas mon pied !
Posté le 25-06-2008 à 16:19:25  profilanswer
 

*oui, pardon, j'ai corrigé ca... c'est bien la methode de B que je souhaite appeler
 
Et il s'agit d'une méthode virtuelle (qui pourrait tres bien etre virutelle pure (=0) et donc ce serait une classe abstraite ce qui rentre tres bien dans le principe d'orienté objet... en JAVA ya que ca)


Message édité par NounouRs le 25-06-2008 à 16:21:03
n°1751207
kyntriad
Posté le 25-06-2008 à 16:40:35  profilanswer
 

Bah en l'occurence c'est un fait que visual studio 2005 n'aime pas quand on fait cela. Après savoir le pourquoi du comment je sais pas trop (je cherche en fait ça m'intrigue un peu tout ça)

 

edit: ah j'avais pas vu que tu avais changé le A en B :p Ca marche d'ailleurs à présent, si tu met methode1 de A en virtuelle pure ou que tu lui met un corps.


Message édité par kyntriad le 25-06-2008 à 16:58:30

---------------
You can't start a fire with moonlight
n°1751257
Joel F
Real men use unique_ptr
Posté le 25-06-2008 à 17:22:54  profilanswer
 

la présence de paramètres par défaut fait parti de la signature non ?
Donc faut que ca soit cohérent avec le prototype de la fonction héritée.

n°1751307
Taz
bisounours-codeur
Posté le 25-06-2008 à 19:00:17  profilanswer
 

Joel F a écrit :

la présence de paramètres par défaut fait parti de la signature non ?
Donc faut que ca soit cohérent avec le prototype de la fonction héritée.


non. ce que tu veux faire est déconseillé, ça fait pas bon ménage du tout.

 

si tu veux ce comportement, c'est peut-être aussi bien de faire:
- une virtual do_stuff(a, b);
- une pas virtual stuff(a, b = c)  { return this->do_stuff(a, b); }


Message édité par Taz le 25-06-2008 à 19:20:07
n°1751331
Joel F
Real men use unique_ptr
Posté le 25-06-2008 à 20:12:15  profilanswer
 

je note :o

n°1751365
Taz
bisounours-codeur
Posté le 25-06-2008 à 21:17:14  profilanswer
 

les valeurs par défaut, c'est du maquillage pour compilateur. D'ailleurs tu ne déclares tes valeurs par défaut que dans tes déclarations et tu ne les répètes pas dans tes définitions.

n°1751374
kyntriad
Posté le 25-06-2008 à 21:30:02  profilanswer
 

Ça se passe comment en fait la résolution des valeurs par défaut au niveau compilo ? (en particulier par rapport à l'héritage)

 

j'arrive po a retrouver le bouquin ou j'avais lu des trucs là dessus...


Message édité par kyntriad le 25-06-2008 à 21:30:51

---------------
You can't start a fire with moonlight
n°1751396
Taz
bisounours-codeur
Posté le 25-06-2008 à 21:52:03  profilanswer
 

bah c'est ambigüe, ça provoque une erreur, il faut expliciter avec un cast de fonction membre et tout

mood
Publicité
Posté le 25-06-2008 à 21:52:03  profilanswer
 

n°1751400
Taz
bisounours-codeur
Posté le 25-06-2008 à 21:57:39  profilanswer
 

genre un bon vieux
 

Code :
  1. (x.*static_cast<void (X::*)()>(&X::foo))();


 
pour faire la différence entre
 

Code :
  1. struct X {
  2.   void foo();
  3.   void foo(int = 42);
  4. };

n°1751788
sligor
Posté le 26-06-2008 à 14:02:55  profilanswer
 

Taz a écrit :

genre un bon vieux
 

Code :
  1. (x.*static_cast<void (X::*)()>(&X::foo))();


 
pour faire la différence entre
 

Code :
  1. struct X {
  2.   void foo();
  3.   void foo(int = 42);
  4. };



Mais c'est horrible [:kzimir]


Message édité par sligor le 26-06-2008 à 14:03:07

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

  Valeur par defaut et heritage + methode virtuelle

 

Sujets relatifs
Liste deroulante php selection de la plus recente valeur ( date )Récupérer la valeur de IDENTITY avant insertion
transmettre une valeurRécuperer la valeur d'une cellule définie
[Résolu] Récupere la valeur d'un Selectméthode la plus rapide pour afficher un (très) gros tableau
Valeur non renseignée dans un tableau 1 dim Matlab [Resolu]masquage erreur #valeur sous VBA Excel
Champs ou méthode abstract ET statique (vive la POO)Visibilité d'une méthode après un héritage
Plus de sujets relatifs à : Valeur par defaut et heritage + methode virtuelle


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