Saltar al contenido

Diferencia de C ++ entre virtual = 0; y función vacía

Solución:

Para tu

class SomeClass{
   virtual void aMethod()=0;
}

la presencia de un método virtual puro hace tu clase abstracto. Una vez que tenga uno de esos métodos virtuales puros, =0, en su clase, no puede crear una instancia de la clase. Es más, cualquier clase derivada debe implementar el virtual puro aMethod(), o también se convierte en una clase abstracta.

En su clase derivada, sobrescribe el método virtual puro de arriba, y esto hace que la clase derivada no sea abstracta. Puede crear una instancia de esta clase derivada.

Pero, en la clase derivada, el cuerpo del método está vacío, ¿verdad? Es por eso que su pregunta tiene sentido: ¿por qué no hacer que la clase también sea puramente virtual? Bueno, su clase puede implicar otros métodos. Si es así, SomeClass no se puede crear una instancia (hay un método virtual puro), mientras que la clase secundaria SomeClassSon puede ser.

Lo mismo se aplica a su AnotherClass, que se puede instanciar, al contrario de SomeClass.

La diferencia es que virtual void aMethod() = 0 es un puro función virtual, significa que:

  1. SomeClass se convierte en una clase base abstracta, lo que significa que no se puede instanciar.
  2. Cualquier clase que herede de SomeClass debe implementar aMethod, o también se convierte en una clase base abstracta que no se puede instanciar

Tenga en cuenta que cualquier clase con una o más funciones virtuales puras es automáticamente una clase base abstracta.

El “igual a 0” al que te refieres se llama “pura virtual“. Es una función que el niño que quiere ser instanciado TIENE que implementar en lugar de proporcionar una funcionalidad básica, lo que significa que la clase principal va a definir la funcionalidad que tiene que existir, pero que el padre no tiene conocimiento de cómo lo hará el niño . Tenga en cuenta que esto hace que la clase sea abstracta en el sentido de que no se puede crear una instancia. Por ejemplo, es posible que desee definir una clase “Mamífero” de la que pueda heredar y quiero que sus hijos actúen de cierta manera, pero no puedo simplemente hacer un “Mamífero” En su lugar, crearía una clase de “Jirafa” y me aseguraría de que actúe como se supone que debe hacerlo.

También se explica en esta pregunta SO.

La función “Vacía” a la que se refiere es, en cambio, una funcionalidad en la que la función está definida y se puede llamar, pero no hace nada.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *