Il seguente codice:ereditarietà multipla e puri funzioni virtuali
struct interface_base
{
virtual void foo() = 0;
};
struct interface : public interface_base
{
virtual void bar() = 0;
};
struct implementation_base : public interface_base
{
void foo();
};
struct implementation : public implementation_base, public interface
{
void bar();
};
int main()
{
implementation x;
}
non riesce a compilare con i seguenti errori:
test.cpp: In function 'int main()':
test.cpp:23:20: error: cannot declare variable 'x' to be of abstract type 'implementation'
test.cpp:16:8: note: because the following virtual functions are pure within 'implementation':
test.cpp:3:18: note: virtual void interface_base::foo()
ho giocato intorno con esso e capito che, per rendere l' 'interfaccia - > interface_base 'e' implementation_base -> interface_base 'ereditarietà virtuale, risolve il problema, ma non capisco perché. Qualcuno può spiegare cosa sta succedendo?
p.s. Ho omesso di proposito i distruttori virtuali per rendere il codice più breve. Si prega di non dirmi di metterli in, so già :)
vedere anche: http://stackoverflow.com/questions/457609/diamond-inheritance-and-pure-virtual-functions – bdonlan