通常的方法上的Woverloaded-virtual警告

时间:2017-09-05 16:59:31

标签: c++ oop

我很困惑为什么以下代码会产生Woverloaded-virtual警告。

class TestVirtual
{
public:
    TestVirtual();
    virtual void TestMethod(int i);
};

class DerivedTestVirtual : public TestVirtual
{
public:
    void TestMethod();

};

派生类具有通常的方法TestMethod,没有参数 - 签名与基类的类似虚方法不同。那为什么编译器无法解决这种情况呢?

1 个答案:

答案 0 :(得分:5)

警告的原因是no参数版本隐藏了基类的int版本。

DerivedTestVirtual tdv;
tdv.TestMethod(0); // This line will cause an error.

你可以通过声明你使用基数的所有原始重载来规避这一点,如下所示:

class DerivedTestVirtual : public TestVirtual
{
public:
    using TestVirtual::TestMethod;
    void TestMethod();
};

警告会引起您的注意。它也很有用,因为当你试图覆盖它时会发生这样的错误,但是意外地会导致超载。虽然现在你使用override说明符来代替它。