虚拟功能被非虚拟功能取代

时间:2018-06-21 11:32:02

标签: c++ polymorphism virtual-functions

今天我发现了一些令我惊讶的东西:

#include <iostream>

using namespace std;

class A {
public:
    virtual void reset() = 0;
};

class B : public A {
public:
    virtual void reset() override {
        cout << "reset()";
    }
};

class C : public B {
public:
    void reset(int r) {
        cout << "reset(" << r << ")";
    }
};

int main()
{
    C c;
    c.reset();
    return 0;
}

如果我尝试按原样编译代码,则编译器会抱怨reset()不匹配。但是,如果我将reset(int r)注释掉,则会发现reset()。这怎么可能?没有签名冲突或其他原因,为什么会发生?

0 个答案:

没有答案