Следующий код:множественное наследование и чистые виртуальные функции
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;
}
не удается скомпилировать со следующими ошибками:
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()
Я играл с ним и понял, что делает «интерфейс - > interface_base 'и' implementation_base -> interface_base 'наследует виртуальную, исправляет проблему, но я не понимаю, почему. Может кто-нибудь объяснить, что происходит?
p.s. Я пропустил виртуальные деструкторы с целью сделать код короче. Пожалуйста, не говорите мне, чтобы я их ввел, я уже знаю :)
см. Также: http://stackoverflow.com/questions/457609/diamond-inheritance-and-pure-virtual-functions – bdonlan