Deux classes de base ont le même nom de fonction. Je veux hériter des deux, et surcharger chaque méthode différemment. Comment puis-je faire cela avec une déclaration et une définition séparées (au lieu de définir dans la définition de la classe) ?
#include <cstdio>
class Interface1{
public:
virtual void Name() = 0;
};
class Interface2
{
public:
virtual void Name() = 0;
};
class RealClass: public Interface1, public Interface2
{
public:
virtual void Interface1::Name()
{
printf("Interface1 OK?\n");
}
virtual void Interface2::Name()
{
printf("Interface2 OK?\n");
}
};
int main()
{
Interface1 *p = new RealClass();
p->Name();
Interface2 *q = reinterpret_cast<RealClass*>(p);
q->Name();
}
Je n'ai pas réussi à déplacer la définition dans VC8. J'ai découvert que le mot-clé spécifique de Microsoft __interface peut faire ce travail avec succès, code ci-dessous :
#include <cstdio>
__interface Interface1{
virtual void Name() = 0;
};
__interface Interface2
{
virtual void Name() = 0;
};
class RealClass: public Interface1,
public Interface2
{
public:
virtual void Interface1::Name();
virtual void Interface2::Name();
};
void RealClass::Interface1::Name()
{
printf("Interface1 OK?\n");
}
void RealClass::Interface2::Name()
{
printf("Interface2 OK?\n");
}
int main()
{
Interface1 *p = new RealClass();
p->Name();
Interface2 *q = reinterpret_cast<RealClass*>(p);
q->Name();
}
mais y a-t-il une autre façon de faire quelque chose de plus général qui fonctionnerait avec d'autres compilateurs ?