我很困惑为什么下面的代码会产生 Woverloaded-virtual 警告。
class TestVirtual
{
public:
TestVirtual();
virtual void TestMethod(int i);
};
class DerivedTestVirtual : public TestVirtual
{
public:
void TestMethod();
};
派生类具有不带参数的常用方法 TestMethod - 签名不同于基类的类似虚拟方法。那为什么编译器不能解决这种情况呢?
最佳答案
警告的原因是无参数版本从基类中隐藏了 int
版本。
DerivedTestVirtual tdv;
tdv.TestMethod(0); // This line will cause an error.
你可以通过声明你使用来自基础的所有原始重载来规避这种情况,如下所示:
class DerivedTestVirtual : public TestVirtual
{
public:
using TestVirtual::TestMethod;
void TestMethod();
};
警告是为了提请您注意该问题。而且它也很有用,因为当您尝试覆盖它时可能会发生这样的错误,但不小心导致重载。尽管现在您会使用 override
说明符来捕获它。
关于c++ - 通常方法上的 Woverloaded-virtual 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46060018/