jak zaimplementować Interfejsy w C++? [duplikat]

Możliwy duplikat:
preferowany sposób symulacji interfejsów w C++

Byłem ciekaw, czy są interfejsy w C++, ponieważ w Javie jest implementacja wzorców projektowych głównie z oddzieleniem klas za pomocą interfejsów. Czy istnieje podobny sposób tworzenia interfejsów w C++?

Author: Community, 2012-03-18

3 answers

C++ nie ma wbudowanych pojęć interfejsów. Można go zaimplementować używając klas abstrakcyjnych, które zawierają tylko czyste funkcje wirtualne . Ponieważ pozwala na wielokrotne dziedziczenie, możesz dziedziczyć tę klasę, aby utworzyć inną klasę, która następnie będzie zawierać ten interfejs (mam na myśli interfejs obiektu :) ) w nim.

Przykładowym przykładem może być coś takiego -

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;
}
 82
Author: MD Sayem Ahmed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-14 15:37:22

W C++nie ma pojęcia o interfejsie,
Można symulować zachowanie za pomocą klasa abstrakcyjna.
Klasa abstrakcyjna jest klasą, która ma przynajmniej jedną czystą funkcję wirtualną, nie można tworzyć żadnych instancji klasy abstrakcyjnej, ale można tworzyć wskaźniki i odniesienia do niej. Również każda klasa dziedzicząca z klasy abstrakcyjnej musi zaimplementować czyste funkcje wirtualne, aby jej instancje mogły zostać utworzone.

 12
Author: Alok Save,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-26 14:37:33

Interfejs to nic innego jak czysta klasa abstrakcyjna W C++. Najlepiej ten interfejs class powinien zawierać tylko czysty virtual metody publiczne i static const Dane. np.

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

  virtual void Foo() = 0
  virtual int Get() const = 0;
  virtual inline ~InterfaceA() = 0;
};
InterfaceA::~InterfaceA () {}
 10
Author: iammilind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-14 15:38:40