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

 


Dernière réponse
Sujet : [C++] Overload & Heritage multiple
TukMaster666 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;
};

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
TukMaster666 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;
};
wpk 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...
verdoux 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. };

verdoux 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]

wpk 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

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)