emular Java interface
, se puede utilizar una base común con funciones virtuales puras única.
Necesita usar la herencia virtual, de lo contrario podría obtener herencia repetida: la misma clase puede ser una clase base más de una vez en C++. Esto significa que el acceso de esta clase base sería ambiguo en este caso.
C++ hace no proporcionar el equivalente exacto de Java interface
: en C++, anulando una función virtual sólo puede ser hecho en una clase derivada de la clase con la declaración de función virtual, mientras que en Java, la overrider para un método en un interface
se puede declarar en una clase base.
[Ejemplo:
struct B1 {
void foo();
};
struct B2 {
virtual void foo() = 0;
};
struct D : B1, B2 {
// no declaration of foo() here
};
D
hereda también declaraciones de función: B1::foo()
y B2::foo()
.
B2::foo()
es puramente virtual, entonces D::B2::foo()
es también; B1::foo()
no reemplaza B2::foo()
porque B2
no es una clase derivada de B1
.
Por lo tanto, D
es una clase abstracta.
--end ejemplo]
De todos modos, ¿por qué te emular los límites arbitrarios de Java en C++?
EDITAR: ejemplo añadido para la aclaración.
C++ admite plena [herencia múltiple] (http://en.wikipedia.org/wiki/Multiple_inheritance), por lo que no hay distinción entre clases e interfaces como en Java. Si haces una clase con todos los métodos virtuales puros, entonces es el equivalente de una interfaz Java. – DaoWen
Una clase abstracta con solo funciones de miembros virtuales puros. – oldrinb
Considere también la palabra clave '__interface' de VC++. revisa MSDN. – MasterMastic