struct IA
{
virtual void a() = 0;
};
struct IB : virtual IA
{
virtual void b() = 0;
};
struct IC : virtual IB
{
virtual void c() = 0;
};
struct ID : virtual IA, virtual IB, virtual IC
{
virtual void d() = 0;
};
struct D : ID
{
void a() override {}
void b() override {}
void c() override {}
void d() override {}
};
int main()
{
D d;
d.a();
d.b();
d.c();
d.d();
IA* ia = &d;
ia->a();
IB* ib = &d;
ib->b();
IC* ic = &d;
ic->c();
}