struct P1 {
virtual void f() {} // Функция 1
};
struct P2 {
virtual void f() {} // Функция 2
};
struct D :P1, P2 {
void f() override {} // Здесь переопределяется функция 1 или функция 2?
};
为什么上面的代码没有抛出类似“ambiguous redefinition”这样的编译错误?
编译器如何确定要在D P1::f()or中覆盖什么P2::f()?
如果它
D覆盖了一个函数f,那么它有什么区别呢?P1::f还是P2::f?毕竟,它已经有了自己的这个功能的实现。Fixies 将写入vtable新地址,仅此而已。这里没有歧义。甚至反之亦然。通过声明D::f你摆脱了歧义。