我很困惑为什么以下代码产生Woverloaded-virtual警告.
class TestVirtual
{
public:
    TestVirtual();
    virtual void TestMethod(int i);
};
class DerivedTestVirtual : public TestVirtual
{
public:
    void TestMethod();
};
派生类具有通常的方法TestMethod,没有参数 - 签名与基类的类似虚方法不同.那为什么编译器无法解决这种情况呢?
警告的原因是no参数版本隐藏int了基类的版本.
DerivedTestVirtual tdv;
tdv.TestMethod(0); // This line will cause an error.
您可以通过声明使用基础中的所有原始重载来规避这一点,如下所示:
class DerivedTestVirtual : public TestVirtual
{
public:
    using TestVirtual::TestMethod;
    void TestMethod();
};
警告会引起您的注意.它也很有用,因为当你试图覆盖它时会发生这样的错误,但不小心会导致重载.虽然现在你使用说明override符来代替它.
| 归档时间: | 
 | 
| 查看次数: | 202 次 | 
| 最近记录: |