Comment déclarer une interface en C++

Giles314 Messages postés 21 Date d'inscription samedi 23 décembre 2006 Statut Membre Dernière intervention 23 avril 2021 - 20 déc. 2007 à 11:25
Giles314 Messages postés 21 Date d'inscription samedi 23 décembre 2006 Statut Membre Dernière intervention 23 avril 2021 - 23 déc. 2007 à 02:11
Bonjour,

Ma question est quelque peu théorique car j'ai une solution mais qui ne me semble pas "pure".
Ce que j'appelle une interface est une spécification sans code associé (virtuelle pure) par exemple
class Interface
{
    virtual int Run (void) = 0;
    virtual ~Interface ()  = 0;
};

Malheureusement une classe comme celle-ci ne se linke pas dans mon environnement gcc sous MinGW (mais je suppose que c'est vrai avec d'autres compilateurs).

En effet si je déclare:
class Implementation : public Interface
{
    Implementation();
    virtual int Run (void);
    virtual ~Implementation ();
};
int main()
{
    Implementation Programme;
    return Programme.Run();
}

Toute utilisation de Implementation va générer une référence à la fonction Interface::~Interface qui n'existe pas.
Y a-t-il une solution à ce problème sans définir le destructeur (virtual ~Interface (){}) qui mettrait du code dans l'interface - certe pas beaucoup - qui perdrait ainsi son status d'interface pure ?
Je sais je suis un peu tatillon, mais une interface c'est juste une interface

40 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
20 déc. 2007 à 18:13
Je n'ai jamais eu de problème avec le destructeur virtuel pure. Mais dans ton cas, ne pas déclarer le destructeur te poserait un problème ?

class Interface
{
    virtual int Run (void) = 0;
};

Mais pour revenir a ton problème, moi j'en vois un autre:
-> ton constructeur n'est pas accessible car déclaré "private".
0
Rejoignez-nous