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

  FORUM HardWare.fr
  Programmation

  [C++] Overload & Heritage multiple

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Overload & Heritage multiple

n°93771
wpk
Posté le 26-01-2002 à 19:56:16  profilanswer
 

Une question un peu tordue :
 
class A  
{
  public : void f(int) {...}
};
 
class B
{
  public : void f(char *) { ... }
};
 
class C : public A, public B
{
};
 
void main()
{
  C unC;
  unC.f(5);
  unC.f("toto" );
}
 
Y'a-t-il un moyen quelquonque pour que les 2 versions de f soyent automatiquement injectes ds l'espace de nomage de C sans devoir passer par des  
 
using A::f;
using B::f;
 
ni  
 
void C::f(int arg) { A::f(arg); }
void C::f(char *arg) { B::f(arg); }
 
???
 
PS: je ne peux en aucun cas changer le nom de f dans A ou dans B

mood
Publicité
Posté le 26-01-2002 à 19:56:16  profilanswer
 

n°93788
verdoux
And I'm still waiting
Posté le 26-01-2002 à 20:46:23  profilanswer
 

Les 2 fonctions n'ont pas la même signature donc pas de conflit.
Le compilo choisira la bonne fonction selon l'argument (il peut y a voir conflit si l'argument passé est d'aucun des types proposés)

 

[edtdd]--Message édité par Verdoux--[/edtdd]

n°93793
verdoux
And I'm still waiting
Posté le 26-01-2002 à 21:09:56  profilanswer
 

Je dis que des conneries moi :D
Tu peux essayer :

Code :
  1. class C : public A, public B
  2. {
  3. public:
  4.         void f(int i) { A::f(i);}
  5.         void f(char * c) {B::f(c);}
  6. };

n°93801
wpk
Posté le 26-01-2002 à 21:54:55  profilanswer
 

Hehe, au debut j'ai eu la meme reaction que toi Verdoux  
mais en fait je comprends pas trop pourquoi, aucun des compilos C++ n'accepte ce type de fonctionnalité.
 
Ta 2eme solution, c'est ce que j'ai fait (en plus simple, y'a ma premiere solution l'utilisation de using mais qui ne marche comme il faut qu'avec gcc)
 
J'ai posé la question, parce que je trouve ca pas bo donc je me demandais si y'a pas un truc de plus elegant. Pour le compilo y'a rien d'ambigu dans ce genre de code...

n°93839
TukMaster6​66
Posté le 27-01-2002 à 12:33:06  profilanswer
 

selon Stroustrup(The c++ programing language third edition p.393)
 
le code pour ton prob est le suivant (et si un compilo ne le compile pas ou ne fais pas se kil faut c kil ne suit fort probablement pas bien la norme) :
 
class A  
{  
 public : void f(int) {...}  
};  
 
class B  
{  
 public : void f(char *) { ... }  
};  
 
class C : public A, public B  
{  
public :
using A::f;
using B::f;
};


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

  [C++] Overload & Heritage multiple

 

Sujets relatifs
[C++] heritage de cin[C++] heritage
[PHP] Condition multiple[ PHP / MySQL ] INSERT multiple
[C++] Héritage balaise![ASP] -> Liste déroulante multiple por favor !!
[C++] Question sur l'héritage[ CSS ] :: héritage de "classes"
[JAVA] pb avec affichage multiple swing/draw[C++] help héritage
Plus de sujets relatifs à : [C++] Overload & Heritage multiple


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