Como declarar uma interface em C++? (funções virtual puras e classes abstratas)
Olá! Comecei a estudar C++ recentemente depois de Java, e fico muito confuso com a ausência da keyword `interface`, como em Java ou C#. Em Java, eu costumava fazer assim:
```java
public interface Drawable {
void draw();
void resize(int width, int height);
}
```
Mas em C++ não encontro um análogo direto. Eu sei que em C++ existem classes abstratas com funções virtual puras, mas não tenho certeza de como declará-las e usá-las corretamente.
Por exemplo, tentei escrever este código:
```cpp
class Drawable {
public:
virtual void draw() = 0;
virtual void resize(int width, int height) = 0;
};
```
Mas surgiram algumas dúvidas:
1. Preciso adicionar um destructor virtual? Se sim, ele deve ser puramente virtual?
2. Preciso impedir a cópia de objetos dessa classe?
3. Como herdar corretamente dessa classe e sobrescrever os métodos?
4. Existem "best practices" para declarar interfaces em C++?
Ouvi falar sobre herança múltipla e o problema do losango.