#include <iostream>
struct B1
{
virtual void method()=0;
virtual ~B1(){}
};
struct B2
{
virtual void method()=0;
virtual ~B2(){}
};
struct D: B1, B2
{
virtual void method()
{
std::cout << "D::method\n";
};
};
int main(int argc,char *argv[])
{
D d;
B1 &b1=d;
B2 &b2=d;
b1.method();
b2.method();
return 0;
}
Uwaga, B1 i B2 nie mają wspólnego interfejsu.Zastępowanie funkcji wirtualnej klas podstawowych, które nie mają wspólnego interfejsu.
Czy to jest legalne? Jeśli tak - w jakim standardzie? C++ 98/03/11?
Zarówno msvc, jak i gcc skompilowały go poprawnie.
Wcześniej myślałem, że muszę użyć jakiegoś wspólnego interfejsu dla takiego przypadku (możliwe wirtualne dziedziczenie).
Czy taka sytuacja ma jakąś specjalną nazwę?
Jak to działa w szczegółach, proszę? Może jakieś referencje ISO?
Jeśli wyjaśnisz, co prowadzi do tego, że jest to specjalny przypadek, ktoś może znaleźć dobre wyjaśnienie. –
Ponieważ w takim przypadku oczekuję dwóch różnych * dziedziczonych * dziedziczonych funkcji wirtualnych w metodzie D: B1 :: i B2 ::. – John