今天我发现了一些令我惊讶的东西:
#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()
。这怎么可能?没有签名冲突或其他原因,为什么会发生?