#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;
}
Nota, B1 e B2 non condividono l'interfaccia comune.Ignora la funzione virtuale delle classi base, che non condividono l'interfaccia comune
È legale? Se sì - in quale standard? C++ 98/03/11?
Entrambi, msvc e gcc lo hanno compilato OK.
In precedenza ho pensato, che devo utilizzare un'interfaccia comune per tale caso (possibile ereditarietà virtuale).
Questa situazione ha un nome speciale?
Come funziona nei dettagli, per favore? Forse alcuni riferimenti ISO?
Se spieghi cosa ti porta a pensare che sia un caso speciale, qualcuno potrebbe trovare una buona spiegazione. –
Perché in questo caso, mi aspetto di avere due diverse funzioni virtuali ereditate * indipendenti * in D: B1 :: method e B2 :: method. – John