Ojalá pudiera devolver un objeto de clase base virtual para que no tenga que ocuparme de la gestión de memoria (la idea de programación de funciones también estimula esta búsqueda). Eso significa que estoy buscando algunas cosas como a continuación:siempre debe devolver un puntero a la clase en el diseño de la interfaz?
class Car
{
public:
virtual int price() = 0 ;
virtual string brand() = 0 ;
}
class Interface
{
public:
virtual Car giveMeACar() = 0 ;
virtual vector<Car> listMeAllTheCars() = 0 ;
}
Sin embargo, esto ni siquiera compilará debido a que el coche es una interfaz abstracta, con un mensaje de error:
inválida tipo abstracto de devolución para función de miembro '
virtual Car giveMeACar() = 0
; porque las siguientes funciones virtuales son puras dentro de 'Car
':int price()
string brand()
;
es así, ¿eso significa que tengo que revisar la interfaz a algo así como a continuación y gestor de la memoria a mí mismo (eliminar la instancia después de usarlo) - descartando la opción de utilizar el puntero inteligente.
class Interface
{
public:
virtual Car* giveMeACar() = 0 ;
virtual vector<Car*> listMeAllTheCars() = 0 ;
}
Mi pregunta es: ¿es esta la única opción que tengo cuando diseño de una interfaz donde cada cosas (clase) es abstracto?
Devolver un objeto de clase de interfaz es perfecto válido en Java. C++ parece ser litera poco detallado y contra intuitivo en esta faceta. Más que a menudo, creo que C++ es un "puntero al lenguaje de programación de objetos" en lugar de un "lenguaje de programación de objetos" porque sin un puntero no se obtienen demasiados beneficios de la programación de objetos.
+1 para realizar funciones virtuales privadas: – Chubsdad
@chubsdad: Why? Esa no es mi intención ... Debería haber usado public – pierrotlefou
-1 entonces, ver el modismo Non Virtual Interface. Por ejemplo, no puede aplicar invariantes en los límites de su interfaz si los métodos públicos son virtuales. –