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

标签 c++ oop

我很困惑为什么下面的代码会产生 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/

相关文章:

PHP 面向对象 : Unique method per argument type?

php - PHP 应用程序可能存在循环依赖问题

c++ - 指向继承类对象的指针 vector C++

javascript - 在 Javascript 中引用对象属性

c++ - 断言动态消息?

c++ - C++ 函数可以返回多个值吗?

java - OOP:哪个类应该拥有一个方法?

Java 对参数化类型的原始引用不尊重参数

c++ - 直接访问基类中的 protected 字段

c++ - 异常在 MSVC 中的析构函数中抛出异常