#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 y B2 no comparten una interfaz común.Sobrescribe la función virtual de las clases base, que no comparten una interfaz común
¿Es esto legal? En caso afirmativo, ¿en qué estándar? C++ 98/03/11?
Ambos, msvc y gcc lo han compilado correctamente.
Anteriormente pensé que tenía que usar una interfaz común para ese caso (posible herencia virtual).
¿Tal situación tiene algún nombre especial?
¿Cómo funciona en detalles, por favor? Tal vez algunas referencias ISO?
Si explica lo que lo lleva a pensar que es un caso especial, es posible que alguien encuentre una buena explicación. –
Porque en ese caso, espero tener dos funciones virtuales heredadas * independientes * distintas en D: B1 :: method y B2 :: method. – John