Palabra clave "virtual" de C++ para funciones en clases derivadas. ¿Es necesario?

Resuelto Anarki asked hace 13 años • 9 respuestas

Con la definición de estructura dada a continuación...

struct A {
    virtual void hello() = 0;
};

Enfoque #1:

struct B : public A {
    virtual void hello() { ... }
};

Enfoque #2:

struct B : public A {
    void hello() { ... }
};

¿Existe alguna diferencia entre estas dos formas de anular la función de saludo?

Anarki avatar Feb 04 '11 13:02 Anarki
Aceptado

Son exactamente lo mismo. No hay ninguna diferencia entre ellos aparte de que el primer enfoque requiere más escritura y es potencialmente más claro.

James McNellis avatar Feb 04 '2011 06:02 James McNellis

La 'virtualidad' de una función se propaga implícitamente; sin embargo, al menos un compilador que uso generará una advertencia si la virtualpalabra clave no se usa explícitamente, por lo que es posible que desee usarla aunque solo sea para mantener el compilador en silencio.

Desde un punto de vista puramente estilístico, incluir la virtualpalabra clave claramente "anuncia" al usuario el hecho de que la función es virtual. Esto será importante para cualquiera que subclase B sin tener que verificar la definición de A. Para jerarquías de clases profundas, esto se vuelve especialmente importante.

Clifford avatar Feb 04 '2011 07:02 Clifford