Overload & Heritage multiple [C++] - Programmation
Marsh Posté le 26-01-2002 à 20:46:23
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]
Marsh Posté le 26-01-2002 à 21:09:56
Je dis que des conneries moi
Tu peux essayer :
Code :
|
Marsh Posté le 26-01-2002 à 21:54:55
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...
Marsh Posté le 27-01-2002 à 12:33:06
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;
};
Marsh Posté le 26-01-2002 à 19:56:16
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