Czy jest jakiś problem z częściowym przesłonięciem zestawu funkcji wirtualnych zdefiniowanych przez klasę podstawową?Problemy z nadpisaniami funkcji częściowej klasy w języku C++
Moje kompilator daje następujące ostrzeżenie:
overloaded virtual function "MyBaseClass::setValue" is only partially overridden in class "MyDerivedClass".
Klasy wyglądać następująco:
class MyBaseClass
{
public:
virtual void setValue(int);
virtual void setValue(SpecialType*);
}
class MyDerivedClass : public MyBaseClass
{
public:
virtual void setValue(int);
}
Prosty sposób, aby pozbyć się tego ostrzeżenia może używać różnych nazw dla funkcji bazowych, ale chciałem wiedzieć, czy istnieje jakiś nieodparty powód, aby naprawić to ostrzeżenie. Nie wierzę, że to narusza standard C++. Domyślam się, że jest to ostrzeżenie programisty, że może on zapomniał wprowadzić zachowanie dla wszystkich możliwych typów danych wejściowych. W naszym przypadku celowe jest wyłączenie niektórych konkretnych typów.
Czy odradzasz całkowicie ignorowanie tego ostrzeżenia?
Jeśli rozważasz użyciu różnych nazw dla funkcji bazowych, za wszelką cenę zrobić. Sugeruje mi to, że MyBaseClass :: setValue (int) robi inną koncepcyjną rzecz z MyDerivedClass :: setValue (int), a to jest złe. Funkcje wirtualne powinny robić to samo w bazie i wyprowadzane, lub można uzyskać trudne do znalezienia błędy z drobnych zmian. –
W moim konkretnym przypadku koncepcyjnie robią to samo. Zmiana nazwy mogła być podobna do setValueFromInt() setValueFromSpecialType(), która nie wyglądałaby tak czysto. Zdecydowanie wolałbym używać instrukcji użycia opisanych w jednej z odpowiedzi. Obecnie badam wdrażanie tego podejścia. –