virtuales una subprogramas que puro pura polimorfismo objeto modificador herencia funciones funcion declara como c++ function virtual

una - que es un objeto en c++



¿Son los métodos abstractos y las funciones virtuales puras lo mismo? (5)

En C ++, una función de miembro virtual pura lleva a que el tipo de delimitación sea un "tipo abstracto".

Las funciones en sí mismas no pueden ser abstractas, aunque el término se usa con frecuencia de manera incorrecta.

Por lo que yo sé, tanto los métodos abstractos como las funciones virtuales puras NO proporcionan ninguna funcionalidad ... ¿Podemos decir que ambos son la misma cosa?

Además, supongamos que una clase (no necesariamente declarada como abstracta) contiene una cantidad de métodos implementados (no abstractos o virtuales), pero contiene una función virtual pura. ¿Esta clase es entonces abstracta?


No declaras explícitamente clases o métodos como abstractos en C ++. La presencia de métodos virtuales puros es lo que los hace abstractos.


Yo diría que sí, los métodos abstractos y las funciones virtuales puras son conceptualmente lo mismo.

Además, supongamos que una clase (no necesariamente declarada como abstracta) contiene una cantidad de métodos implementados (no abstractos o virtuales), pero contiene una función virtual pura. ¿Esta clase es entonces abstracta?

Una clase con al menos 1 función virtual pura se denomina clase abstracta.


, son lo mismo. En C ++, un método abstracto es simplemente otra forma de describir las características de una función virtual pura. Ambos solo significan un método sin implementación, que debe implementarse en una subclase antes de que la clase pueda ser instanciada.

La situación con funciones virtuales puras y clases abstractas en C ++ es similar, ya que básicamente significan exactamente lo mismo. Cualquier clase abstracta debe tener al menos 1 función virtual pura o de lo contrario podría ser instanciada y no sería abstracta. Del mismo modo, cualquier clase con al menos 1 función virtual pura debe ser abstracta porque necesita ser extendida para que el método pueda ser implementado.

Por lo tanto, una clase es abstracta si y solo si contiene al menos 1 función virtual / método abstracto puro.

Más tarde, los lenguajes como Java y C # hicieron cosas como esta más explícitas, permitiendo que una palabra clave especial definiera un resumen de clase en lugar de la presencia de una función puramente virtual. C ++ le permite hacer las mismas cosas que estos idiomas, pero son un poco más explícitos al respecto. :RE


Sí, los métodos abstractos son exactamente lo mismo que las funciones virtuales puras; los términos a menudo se usan indistintamente. IMO, "Función virtual pura" es el término técnicamente correcto de C ++ que denota específicamente el hecho de que la función se establece en 0 :

class myClass { public: virtual void vfunc() = 0; // pure specifier };

Una clase abstracta se define por :

una clase que está diseñada para usarse específicamente como una clase base. Una clase abstracta contiene al menos una función virtual pura.

Entonces, básicamente, una clase abstracta es una clase abstracta porque está diseñada para ser una clase base (algunas clases base, por definición, necesitan tener métodos implementables que deberán ser puramente virtuales). Estas clases se convierten en clases abstractas simplemente por cómo se usan y se amplían. A diferencia de los lenguajes como Java, no existe un modificador de palabras clave abstract o de interface por eso necesitamos un "contrato verbal" para hablar de clases abstractas en C ++.