121 votes

comment implémenter les interfaces en C++ ?

Duplicata possible :
Méthode privilégiée pour simuler les interfaces en C++

J'étais curieux de savoir s'il y a des interfaces en C++ car en Java, il y a la mise en œuvre des design patterns principalement avec le découplage des classes via des interfaces. Existe-t-il un moyen similaire de créer des interfaces en C++ ?

0 votes

Egalement duplicata de stackoverflow.com/questions/318064/

1 votes

Avez-vous vraiment besoin d'interfaces ? C++ dispose d'un vaste support pour les modèles. Il suffit d'écrire vos fonctions en recevant des modèles, et de s'assurer que les types passés ont les méthodes requises pour ne pas provoquer d'erreurs de compilation, afin de ne pas imposer à vos utilisateurs d'hériter de quoi que ce soit pour utiliser vos méthodes.

176voto

Sayem Ahmed Points 11839

Le C++ n'a pas de concepts intégrés d'interfaces. Vous pouvez l'implémenter en utilisant classes abstraites qui ne contient que fonctions virtuelles pures . Puisqu'elle permet l'héritage multiple, vous pouvez hériter de cette classe pour créer une autre classe qui contiendra alors cette interface (je veux dire, interface objet :) ).

Un exemple serait quelque chose comme ceci -

class Interface
{
public:
    Interface(){}
    virtual ~Interface(){}
    virtual void method1() = 0;    // "= 0" part makes this method pure virtual, and
                                   // also makes this class abstract.
    virtual void method2() = 0;
};

class Concrete : public Interface
{
private:
    int myMember;

public:
    Concrete(){}
    ~Concrete(){}
    void method1();
    void method2();
};

// Provide implementation for the first method
void Concrete::method1()
{
    // Your implementation
}

// Provide implementation for the second method
void Concrete::method2()
{
    // Your implementation
}

int main(void)
{
    Interface *f = new Concrete();

    f->method1();
    f->method2();

    delete f;

    return 0;
}

25voto

iammilind Points 29275

Une "interface" est équivalente à une classe abstraite pure en C++. Idéalement, cela interface class ne doit contenir que pur virtual public méthodes et static const les membres des données. Par exemple :

struct MyInterface
{
  static const int X = 10;

  virtual void Foo() = 0;
  virtual int Get() const = 0;
  virtual inline ~MyInterface() = 0;
};
MyInterface::~MyInterface () {}

3 votes

Qu'en est-il d'un destructeur virtuel ?

2 votes

J'ajouterais un dtor virtuel pour éviter les éventuelles fuites de mémoire à l'avenir.

0 votes

@CharlesBailey, ça m'a manqué. J'ai modifié le message. Ajouté comme pur virtual juste pour maintenir la pureté abstract ness de la classe et inline afin qu'il puisse résider dans le fichier d'en-tête sans erreur de liaison.

17voto

Alok Save Points 115848

Le concept d'interface n'existe pas en C++,
Vous pouvez simuler le comportement en utilisant un Classe abstraite .
Une classe abstraite est une classe qui possède au moins une fonction virtuelle pure. On ne peut pas créer d'instances d'une classe abstraite mais on peut y créer des pointeurs et des références. De plus, chaque classe héritant de la classe abstraite doit implémenter les fonctions virtuelles pures afin que ses instances puissent être créées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X