¿Cómo se declara una interfaz en C++?
¿Cómo configuro una clase que representa una interfaz? ¿Es esto sólo una clase base abstracta?
Para ampliar la respuesta de bradtgmurray , es posible que desee hacer una excepción a la lista de métodos virtuales puros de su interfaz agregando un destructor virtual. Esto le permite pasar la propiedad del puntero a otra parte sin exponer la clase derivada concreta. El destructor no tiene que hacer nada porque la interfaz no tiene miembros concretos. Puede parecer contradictorio definir una función como virtual e integrada, pero créanme, no lo es.
class IDemo
{
public:
virtual ~IDemo() {}
virtual void OverrideMe() = 0;
};
class Parent
{
public:
virtual ~Parent();
};
class Child : public Parent, public IDemo
{
public:
virtual void OverrideMe()
{
//do stuff
}
};
No es necesario incluir un cuerpo para el destructor virtual; resulta que algunos compiladores tienen problemas para optimizar un destructor vacío y es mejor que utilices el predeterminado.
Crea una clase con métodos virtuales puros. Utilice la interfaz creando otra clase que anule esos métodos virtuales.
Un método virtual puro es un método de clase que se define como virtual y se asigna a 0.
class IDemo
{
public:
virtual ~IDemo() {}
virtual void OverrideMe() = 0;
};
class Child : public IDemo
{
public:
virtual void OverrideMe()
{
// do stuff
}
};
La única razón por la que tiene una categoría de tipo de interfaz especial además de las clases base abstractas en C#/ Java es porque C#/Java no admite herencia múltiple.
C++ admite herencia múltiple, por lo que no se necesita un tipo especial. Una clase base abstracta sin métodos no abstractos (virtuales puros) es funcionalmente equivalente a una interfaz C#/Java.