是否存在部分覆盖基类定义的一组虚函数的问题?
我的编译器提供以下警告:
overloaded virtual function "MyBaseClass::setValue" is only partially overridden in class "MyDerivedClass".
这些类看起来像这样:
class MyBaseClass { public: virtual void setValue(int); virtual void setValue(SpecialType*); } class MyDerivedClass : public MyBaseClass { public: virtual void setValue(int); }
摆脱此警告的简单方法是为基本函数使用不同的名称,但我想知道是否有任何令人信服的理由来修复此特定警告.我不相信这违反了C标准.我的猜测是警告程序员他们可能忘记为所有可能的输入类型实现行为.在我们的例子中,有意排除某些特定类型.
你会劝阻完全压制这个警告吗?
解决方法
setValue(int)的覆盖隐藏了基类的setValue(SpecialType *)(参见
C++ FAQ Lite),因此如果您尝试调用setValue(new SpecialType()),您将收到错误.
您可以通过向派生类添加using指令来避免这种情况,该派生类从基类“导入”重载:
class MyDerivedClass : public MyBaseClass { public: using MyBaseClass::setValue; virtual void setValue(int); };