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++?
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;
}
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.
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 () {}
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