2011-03-15 10 views
19

¿Por qué a veces veo en C++ ejemplos cuando hablo de subclases/herencia, la clase base tiene palabra clave virtual y a veces la función reemplazada también tiene la palabra clave virtual, ¿por qué es necesario agregar a la subclase la palabra clave virtual a veces? Por ejemplo:en C++ cuando se subclasifica por qué a veces es necesario agregar una palabra clave virtual para reemplazar la función?

class Base 
{ 
    Base(){}; 
    virtual void f() 
    ...... 
    } 
}; 

class Sub : public Base 
{ 
    Sub(){}; 
    virtual void f() 
    ...new impl of f() ... 
    } 
}; 
+5

No entiendo - ¿por qué se votó esta pregunta abajo? Es una buena pregunta ... – Nim

+2

Un poco duplicado de http://stackoverflow.com/questions/4024476/should-methods-that-implement-pure-virtual-methods-of-an-interface-class-be-decla/ if He entendido correcto. –

+0

Posible duplicado de la palabra clave "virtual" [C++] para funciones en clases derivadas. ¿Es necesario?] (Https://stackoverflow.com/questions/4895294/c-virtual-keyword-for-functions-in-derived-classes-is-it-necessary) – Satrapes

Respuesta

28

No es necesario, pero ayuda a la legibilidad si sólo se ve la definición de la clase derivada.

§ 10.3 [class.virtual]/3

Si un vf función miembro virtual se declara en una clase base y en una clase derivada, derivada directa o indirectamente de Base, un vf función miembro con el el mismo nombre y la misma lista de parámetros que Base :: vf se declara, luego Derived :: vf también es virtual (esté o no declarado) y sobrescribe 97) Base :: vf.

Donde nota 97), básicamente, establece que si la lista de argumentos es diferente, la función no anulación ni ser necesariamente virtual

Cuestiones relacionadas