web-dev-qa-db-fra.com

comment implémenter des interfaces en C ++?

Duplicate possible:
Méthode privilégiée pour simuler des interfaces en C++

J'étais curieux de savoir s'il existe des interfaces en C++, car en Java, l'implémentation des modèles de conception consiste principalement à découpler les classes via des interfaces. Existe-t-il une manière similaire de créer des interfaces en C++?

68
helpdesk

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

Un exemple d’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;
}
105
MD Sayem Ahmed

Il n'y a pas de concept d'interface en C++,
Vous pouvez simuler le comportement à l’aide de classe abstraite.
La classe abstraite est une classe qui a au moins une fonction virtuelle pure. Vous ne pouvez créer aucune instance d’une classe abstraite, mais vous pouvez créer des pointeurs et des références à cette classe. De plus, chaque classe héritant de la classe abstraite doit implémenter les fonctions virtuelles pures afin de pouvoir créer ses instances.

13
Alok Save

Les interfaces ne sont rien d'autre qu'un classe abstraite pure en C++. Idéalement, cette interface class ne devrait contenir que pure virtual méthodes publiques et static const Les données. Par exemple:

class InterfaceA
{
public:
  static const int X = 10;

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