¿Hay algún problema con anular parcialmente un conjunto de funciones virtuales definidas por una clase base?Problemas con la función de clase parcial anula en C++
Mi compilador proporciona la siguiente advertencia:
overloaded virtual function "MyBaseClass::setValue" is only partially overridden in class "MyDerivedClass".
Las clases se ven así:
class MyBaseClass
{
public:
virtual void setValue(int);
virtual void setValue(SpecialType*);
}
class MyDerivedClass : public MyBaseClass
{
public:
virtual void setValue(int);
}
La forma más fácil de deshacerse de esta advertencia es el uso de diferentes nombres para las funciones de base, pero quería saber si había alguna razón convincente para corregir esta advertencia específica. No creo que esto viole el estándar de C++. Creo que es para advertir a un programador que puede haber olvidado implementar el comportamiento para todos los tipos de entrada posibles. En nuestro caso, es intencional excluir algunos de los tipos específicos.
¿Disuadiría de suprimir esta advertencia por completo?
Si está considerando el uso de diferentes nombres para las funciones de base, por todos los medios hacerlo. Eso me sugiere que MyBaseClass :: setValue (int) hace una cosa conceptual diferente de MyDerivedClass :: setValue (int), y eso es malo. Las funciones virtuales deben hacer lo mismo en base y derivadas, o puede obtener errores difíciles de encontrar a partir de cambios menores. –
En mi caso específico, conceptualmente están haciendo lo mismo. El cambio de nombre podría haber sido algo así como setValueFromInt() setValueFromSpecialType() que no se vería tan limpio. Preferiría usar las declaraciones de uso que se describen en una de las respuestas. Actualmente investigando la implementación de ese enfoque. –