c++ inheritance virtual-destructor

c++ - ¿Necesito especificar virtual en los métodos de subclases también?



inheritance virtual-destructor (3)

Probablemente esto se ha preguntado anteriormente en SO, pero no pude encontrar una pregunta similar.

Considere la siguiente jerarquía de clases:

class BritneySpears { public: virtual ~BritneySpears(); }; class Daughter1 : public BritneySpears { public: virtual ~Daughter1(); // Virtual specifier }; class Daughter2 : public BritneySpears { public: ~Daughter2(); // No virtual specifier };

¿Hay alguna diferencia entre las clases Daughter1 y Daughter2 ?

¿Cuáles son las consecuencias de especificar / no especificar virtual en un destructor / método de subclase?

Gracias.


No, técnicamente no es necesario especificar virtual . Si el método base es virtual, C ++ automáticamente hará que el método de anulación coincidente sea virtual .

Sin embargo deberías estar marcándolos virtual . El método es virtual después de todo y hace que su código sea mucho más claro y fácil de seguir por otros desarrolladores.


Virtual se selecciona automáticamente en las sustituciones de métodos derivados independientemente de si lo especifica en la clase secundaria.

La consecuencia principal es que, sin especificar virtual en el elemento secundario, es más difícil ver en la definición de la clase secundaria que el método es en realidad virtual. Por esta razón, siempre especifico virtual en las clases principal y secundaria.


No lo necesita , pero marcarlo puede hacer que su código sea más claro.

Nota: si su clase base tiene un destructor virtual, entonces su destructor es automáticamente virtual. Es posible que necesite un destructor explícito por otras razones, pero no es necesario volver a declarar un destructor simplemente para asegurarse de que sea virtual. No importa si lo declara con la palabra clave virtual, la declara sin la palabra clave virtual, o no la declara en absoluto, sigue siendo virtual.